将十六进制字符串转换为char数组

时间:2016-10-11 02:06:09

标签: c++

我有一个十六进制值字符串,我需要将它输出到一个char数组,以便它可以用作函数输入。

std::string firststring = "baaaaaaa";
char bufferascii[128];
std::string firsthash = sha512(firststring);
firsthash.copy(bufferascii, 128,0);
char buffer[64];
for(int i=0; i<64; i++) {
    char temp[4];
    temp[0] = bufferascii[i*2];
    temp[1] = bufferascii[(i*2)+1];
    temp[2] = 0;
    int temp0;
    sscanf(temp, "%x", &temp0);
    buffer[i] = (char)temp0;
    printf("%02x", buffer[i]); printf(" ");
}

请注意,sha512(firststring)的输出将为

810dcbf236457fee732f100d261c101412e04fc08abd4cb6ddd4442a7cb690acfcae6eeec25e321d5cf5d63174a3b38b31c0143a5702f5f28a43f38b10742853

但是,此代码是打印:

ffffff81 0D ffffffcb fffffff2 36 45 7F ffffffee 73 2F 10 0D 26 1C 10 14 12 FFFFFFE0 4F ffffffc0 ffffff8a ffffffbd 4C ffffffb6 ffffffdd ffffffd4 44 2A 7C ffffffb6 ffffff90 ffffffac FFFFFFFC ffffffae 6E ffffffee ffffffc2 5E 32 1D 5C fffffff5 ffffffd6 31 74 ffffffa3 ffffffb3 ffffff8b 31 ffffffc0 14 3a 57 02 fffffff5 fffffff2 ffffff8a 43 fffffff3 ffffff8b 10 74 28 53

当我将缓冲区定义为:

时,代码有效
unsigned char buffer[64];

不幸的是我无法将这个unsigned char数组传递给下一个函数,这需要一个char数组作为输入。我假设这意味着我的编译器使用签名字符。

我在这里缺少什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的架构标有char。当作为可变参数函数参数传递时,排名小于int的每个整数类型都将提升为intunsigned int。签名促销保持标志。这就是为什么您将0xFFFFFF预先设置为超过128(0x80)的值。

您可以通过将值转换为unsigned char或更好的uint8_t来解决显示问题:

printf("%02x", (uint8_t)buffer[i])