代码之家  ›  专栏  ›  技术社区  ›  pattex007

将字符转换为十六进制

  •  0
  • pattex007  · 技术社区  · 11 年前

    我正在尝试将密文(来自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)
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   unwind    11 年前

    那不是C,没有 foreach 可能是C++,在这种情况下,问题是 printf() %x 转换说明符正在进行符号扩展。您的平台可能已签名 char 类型

    将值强制转换为 unsigned char .