2017-02-20 182 views
1

我有我用于字节码的字符数组。一个打印出来应该得到你在这里看到相同的十六进制值:字符数组未正确初始化

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; 
+0

一种选择是投不同,'(INT)(无符号字符)currentChar ' –

+1

请不要提倡C风格的转换,static_cast应该总是首选告诉编译器的意图。 – zett42

回答

3

对于大多数系统,char宽度为8位,是一个带符号的整数类型。存储\xB8将使其最重要的位1,这将使其消极。并且将其转换为int也会导致负值,如果int是32位宽,则导致0xffffffb8

你应该使用unsigned char

unsigned char toWrite[] = {/*...*/}; 

此外,static_cast更优选比C样式转换:

cout << hex << static_cast<int>(currentChar) << endl;