字符数组未正确初始化
问题描述:
我有我用于字节码的字符数组。一个打印出来应该得到你在这里看到相同的十六进制值:字符数组未正确初始化
char toWrite[] = {'\x50','\x48','\xB8','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\xFF','\xE0' };
当我尝试了在一个循环中打印这些值,但是,他们是错位的。我看到的却是:
50 48 ffffffb8 00 00 00 00 00 00 00 ffffffff ffffffe0
为什么这些字符打印错了吗?我迭代在foreach循环,每颗元件传递给
cout << hex << (int)currentChar << endl;
答
对于大多数系统,char
宽度为8位,是一个带符号的整数类型。存储\xB8
将使其最重要的位1,这将使其消极。并且将其转换为int
也会导致负值,如果int
是32位宽,则导致0xffffffb8
。
你应该使用unsigned char
:
unsigned char toWrite[] = {/*...*/};
此外,static_cast
更优选比C样式转换:
cout << hex << static_cast<int>(currentChar) << endl;
一种选择是投不同,'(INT)(无符号字符)currentChar ' –
请不要提倡C风格的转换,static_cast应该总是首选告诉编译器的意图。 – zett42