草庐IT

$二进制

全部标签

c++ - 在 C++ 中将十六进制字符串转换为无符号字符

我想将字符串中的十六进制表示形式转换为无符号字符变量,如下所示:std::stringstreamss;uint8_tx;ss>std::hex>>x;//result:x=0x31(=49indecimaland='1'aschar)显然,我假设转换会导致x=0x1f(十进制=31),因为0x1f小于0xff,这是可以存储在8位无符号字符中的最大值。相反发生的是在转换中只使用了我的字符串的前8位。有人可以向我解释为什么会发生这种情况以及如何解决吗? 最佳答案 std::uint8_t是(通常见下文)unsignedchar的别名,

c++ - 写入二进制文件不起作用

下面的代码编译并成功运行,但在退出时没有任何内容写入文件。文件已创建,在选择注册时它会询问所有详细信息并显示消息注册成功。文件customers.data是空的(文件大小为0kb)。write函数没有将对象写入文件。代码中的所有内容似乎都是正确的。无法识别错误。请帮忙主程序:intmain(){intch;Customercust;fstreamfile;file.open("customers.data",ios::out|ios::app|ios::binary);if(!file){coutLogin"Register"Exit">ch;switch(ch){case1:if(c

c++ - 为什么 cout.setf(ios::fixed) 将我的 float 更改为十六进制?

我最近遇到了这个与cout.setf(ios::fixed)有关的奇怪问题。我花了很长时间才找到原因,我想我会在这里询问以了解更多信息。问题在于-使用cout.setf(ios::fixed)时,所有float都打印为十六进制数。为什么会这样?ios::base的文档似乎并不暗示这会发生(至少对我而言)。我使用的是g++5.3.0,下面粘贴的是一个最小示例和输出。#include#includeusingnamespacestd;intmain(intargc,charconst*argv[]){complexI(0.0,1.0);doublepi=M_PI;cout.setf(ios

python - 在 C++ 中编写二进制文件并在 Python 中读取

我想使用C++将一系列数字存储到二进制文件中,以便稍后使用Python打开。目前我在c++中有以下名为*writer.cpp的脚本:#includeintmain(){std::ofstreamoutFile;outFile.open("binaryFile.bin",std::ios::binary);intnumber=0;for(inti=0;i(&number),sizeof(int));}outFile.close();return0;}编译为g++-owriterTest.xwriter.cpp并运行为./writerTest.x生成一个名为“binaryFile.bin”

c++ - 将 float 转换为 bigint(也称为获取二进制指数和尾数的可移植方式)

在C++中,我有一个bigint类,它可以容纳任意大小的整数。我想将大float或double转换为bigint。我有一个工作方法,但有点hack。我使用IEEE754数字规范来获取输入数字的二进制符号、尾数和指数。代码如下(这里忽略符号,不重要):floatinput=77e12;bigintresult;//extractsign,exponentandmantissa,//accordingtoIEEE754singleprecisionnumberformatunsignedint*raw=reinterpret_cast(&input);unsignedintsign=*ra

C++如何将整数存储到二进制文件中?

我有一个包含2个整数的结构,我想将它们存储在二进制文件中并再次读取。这是我的代码:staticconstchar*ADMIN_FILE="admin.bin";structpw{inta;intb;};voidmain(){pw*p=newpw();pw*q=newpw();std::ofstreamfout(ADMIN_FILE,ios_base::out|ios_base::binary|ios_base::trunc);std::ifstreamfin(ADMIN_FILE,ios_base::in|ios_base::binary);p->a=123;p->b=321;fout

c++ - 使用 char 二进制会带来意想不到的结果

我有文件,我从哪里读取第一个字符-意思是前8位。这正是我想要的。我的代码:charcontent;char*pcontent=&content;src_f.read(pcontent,1);cout但是:我确实理解-62。整数可以存储负值,但是4294967234是从哪里来的?我希望一些小于256的正数(因为最多8位..)。你能帮我澄清一下吗?谢谢! 最佳答案 当您将内容变量转换为(int)或(unsignedint)时,您将其转换为32位宽的数据类型。因此,您正在读取的字节(在二进制中似乎等于11000010)变为11111111

c++ - 正确地(独立于 32 位/64 位)将 float 保存到二进制 ofstream

显然在我的机器上,float、double和longdouble各有不同的大小。似乎也没有严格的标准来强制执行每种类型必须有多少字节。然后,如何将浮点值保存到二进制文件中,然后在大小不同的情况下在不同的系统上正确读取它?例如,我的机器有8个字节的double,而乔的有12个字节的double。无需以文本形式导出(例如“0.3232”),也就是说。看起来比二进制表示要紧凑得多。 最佳答案 你必须定义一个格式,并实现它。通常,大多数我知道的网络协议(protocol)使用IEEEfloat和double,输出big-endian(但其他

c++ - 为什么十进制浮点运算的提议没有被 C++0x 接受?

为什么不是decimaltype接受C++0x(现在是C++11)作为完全成熟的类型还是类?他们从2005开始研究它经过相当严厉的critiquein2004最后一篇论文是2009并浏览它,seemsprettycomplete.尽管大多数问题都已解决,2004年提出的担忧是否是拒绝它的依据?boost中甚至没有实现它(尽管今年早些时候的邮件列表中有一些discussion)。 最佳答案 C++11的时间非常匆忙。他们真的不能四处走走,包括所有出现的旧东西。在2009年,很明显已经很晚了,他们根本就没有考虑过。然而,N3407表示(

c++ - 算法:改进的二进制搜索

我正在尝试解决一个经典的面试问题,该问题基本上是对先增加然后减少的列表执行二进制搜索。尽管很明显我们可以实现O(logn),但我无法弄清楚我编写的以下代码有什么问题:#includeusingnamespacestd;intbinarySearch(int*A,intlow,inthigh,intkey){while(lowA[mid]){if(A[mid-1]我问这个问题的原因是因为我想知道两件事。1)代码有什么问题,因为它对某些值(例如“14”)失败。2)能否改进? 最佳答案 我认为您的代码不能很好地处理数组的递增和递减部分。这