使用十六进制值创建char数组

时间:2014-01-19 23:27:15

标签: c hex arrays

我有一个快速的问题给那些了解C方式的人 - 我正在尝试使用十六进制值保存一个char数组,所以它看起来像这样:

char string[84]={0x32,0x51,0x0b,0xa9,0xba,0xbe,0xbb,0xbe,0xfd,0x00,0x15,0x47,0xa8,0x10,0xe6,0x71,0x49,0xca,0xee,0x11,0xd9,0x45,0xcd,0x7f,0xc8,0x1a,0x05,0xe9,0xf8,0x5a,0xac,0x65,0x0e,0x90,0x52,0xba,0x6a,0x8c,0xd8,0x25,0x7b,0xf1,0x4d,0x13,0xe6,0xf0,0xa8,0x03,0xb5,0x4f,0xde,0x9e,0x77,0x47,0x2d,0xbf,0xf8,0x9d,0x71,0xb5,0x7b,0xdd,0xef,0x12,0x13,0x36,0xcb,0x85,0xcc,0xb8,0xf3,0x31,0x5f,0x4b,0x52,0xe3,0x01,0xd1,0x6e,0x9f,0x52,0xf9,0x04};

所以基本上当我使用例如

之类的东西输出它时
for (i=0;i<string_len;i++)
        printf("%d \t---\t %x\n",i,cipher_11[i]);

我希望得到相同的值,只是没有前面的0x,它确实适用于大多数这些值,但是其中一些在前面有“ffff”哪种打破了我的程序的其余部分:)十六进制操作的新手,所以我很确定我做的事情非常愚蠢。任何提示? (顺便说一下输出看起来像图片:http://postimg.org/image/k0npwh9a5/

1 个答案:

答案 0 :(得分:4)

您的某些字符的最高位设置,因此表示负值(假设您的编译器将char视为有符号值)。因此,当它被隐式地转换为整数时(在调用printf期间),它将被解释为负值。所有大于0x7f的值都是这种情况。

您应该将cipher_11声明为unsigned char,或者在printf期间投放该值:

printf("%d \t---\t %x\n", i, (unsigned char)cipher_11[i]);