我正在尝试将密文(从AES加密)转换为十六进制值。
我正在使用以下代码(状态为密文)进行转换:
foreach(char *v, state) {
printf("%02X", *v);
}
对于此密文:
'4¥W[™úËj$Ó¶U6
我得到以下输出:
2734FFFFFFA5575BFFFFFF99FFFFFFFAFFFFFFCB6A240BFFFFFFD318FFFFFFB65536
这不是此密文的正确十六进制形式。我尝试了其他所有导致相同结果的转换方法。
编辑:
foreach代码:
#define foreach(item, array) \
for(int keep = 1, \
count = 0,\
size = sizeof (array) / sizeof *(array); \
keep && count != size; \
keep = !keep, count++) \
for(item = (array) + count; keep; keep = !keep)
最佳答案
那不是C,C中没有foreach
。可能是C ++,在这种情况下,问题在于printf()
的%x
转换说明符的参数正在符号扩展。您的平台可能具有签名的char
类型。
将值强制转换为unsigned char
。