C++ 字符,十六进制,因为它显示ffffff
我有一个char[],带有缓冲区名称,数据以二进制模式使用ifstream保存C++ 字符,十六进制,因为它显示ffffff,c++,C++,我有一个char[],带有缓冲区名称,数据以二进制模式使用ifstream保存 void File::mostrarBuffer(){ for (int a = 0; a < std::strlen(buffer); a++){ std::cout << std::hex << ((int)buffer[a]) << std::endl; } // para ver char test, only for test
void File::mostrarBuffer(){
for (int a = 0; a < std::strlen(buffer); a++){
std::cout << std::hex << ((int)buffer[a]) << std::endl;
}
// para ver char test, only for test
std::cout << "===" << std::endl;
for (int a = 0; a < std::strlen(buffer); a++){
std::cout << buffer[a] << std::endl;
}
char charTest = '\211';
std::cout << "===" << std::endl;
std::cout << std::hex << (int)charTest << std::endl;
std::cout << std::hex << (int)buffer[0] << std::endl;
}
hextump(“little endian”)中的文件:
我的问题是,为什么会出现ffffff89而不是89,而且只有在char[]的第一个元素上,我一直在处理这个问题,但找不到解决方案。谢谢你的阅读
此解决方案适用于我:
std::cout << std::hex << ((unsigned int)(unsigned char)buffer[a])
<< std::endl;
std::cout因为您的char
s已签名(设置了最高位)
很抱歉,我不熟悉如何使用std::hex
,但您需要将其视为无符号字符值。尝试将char
强制转换为和未签名类型。因为您的char
已签名(设置了最高位)
很抱歉,我不熟悉如何使用std::hex
,但您需要将其视为无符号字符值。尝试将char
强制转换为和无符号类型。您使用的char
显然是在编译器中签名的,如果设置了顶部位(符号位),则强制转换将进行符号扩展。您使用的char
显然是在编译器中签名的,如果顶部位(符号位)设置后,强制转换将执行符号扩展。除非先将char
强制转换为unsigned char
,否则强制转换为unsigned char
,否则不应更改任何内容。使用std::coutstd::hex
是一个I/O操纵器:将其转换为流将整数到字符串转换的基数更改为16。由于这是一个永久性的副作用,因此应始终首先移位std::dec
,以便在输出时将数字转换为十进制表示。还有其他类似的操纵器也有同样的问题。这本应取代printf
格式规范,但它有更糟糕的缺点,介于无望的损坏和FUBAR之间。感谢这是解决方案,我认为,这并不是说它更难,如果适应c++或询问stackoverflow,那么愚蠢的问题就是收到你的反对票,你们都花了这么多时间,我不是说你们对我很好thanks@AngelAngel当前位置有几件事可能会让你的问题变得更好,但是我真的不明白为什么它被否决了。除非先将char
转换为unsigned char
,否则转换为unsigned char
不应该改变任何东西。使用std::coutstd::hex
是一个I/O操纵器:将其转换为流会将整数到字符串转换的基数更改为16。由于这是一个永久性的副作用,因此应始终首先移位std::dec
,以便在输出时将数字转换为十进制表示。还有其他类似的操纵器也有同样的问题。这本应取代printf
格式规范,但它有更糟糕的缺点,介于无望的损坏和FUBAR之间。感谢这是解决方案,我认为,这并不是说它更难,如果适应c++或询问stackoverflow,那么愚蠢的问题就是收到你的反对票,你们都花了这么多时间,我不是说你们对我很好thanks@AngelAngel当前位置有几件事可能会让你的问题变得更好,但我真的不明白为什么它被否决了。
0000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
std::cout << std::hex << ((unsigned int)(unsigned char)buffer[a])
<< std::endl;