草庐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++ - 为什么 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

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

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

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)能否改进? 最佳答案 我认为您的代码不能很好地处理数组的递增和递减部分。这

c++ - 为什么将十进制转换为二进制的递归方法比迭代、使用和返回字符串的方法更快?

我创建了两个接受十进制数字并返回该数字的二进制表示的函数。我选择了一种简单的方法来执行此操作,即在进行一些简单的数学运算后将1和0连接到一个字符串。我创建了一个迭代递归方法来执行此操作。然后我用老师给我的计时器课对这两种方法进行了计时。事实证明,与我的迭代方法相比,我的递归方法大约快两倍。为什么会这样?stringCConversion::decimalToBinaryIterative(intnum){stringss;while(num>0){if(num%2!=0){ss='1'+ss;}else{ss='0'+ss;}num=num/2;}returnss;}stringCCo

c++ - 打印数字的二进制表示

下面打印数字二进制表示的代码有什么问题?inta=65;for(inti=0;i>i)&1);} 最佳答案 您从数字中的最低有效位开始并首先打印它。但是,无论您首先打印什么,都是典型二进制表示中的最高有效数字。65是01000001所以这就是你的循环迭代的方式01000001^Output:101000001^Output:1001000001^Output:100...01000001^Output:10000010因此打印输出是相反的。最简单的修复方法是更改​​循环的顺序。for(inti=7;i>=0;i--){cout>i)

c++ - 二进制表达式 ('const char*' 和 'const char *' 的无效操作数)

这个问题在这里已经有了答案:Can'taddstringsinC++(7个答案)关闭4年前。我想用简单的语言知道这个错误的原因。#include#includeintmain(){std::stringexclam="!";std::stringmessage="Hello"+",world"+exclam;std::couttest.cpp:55:35:error:invalidoperandstobinaryexpression('constchar*'and'constchar*')std::stringmessage="Hello"+",world"+exclam;