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

Convert hex string to char array

本文关键字:字符 数组 转换 十六进制 字符串      更新时间:2023-10-16

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

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)的输出将是 810 dcbf236457fee732f100d261c101412e04fc08abd4cb6ddd4442a7cb690acfcae6eeec25e321d5cf5d63174a3b38b31c0143a5702f5f28a43f38b10742853

然而,这段代码打印的是:

ffffff81 0d FFFFFFCB fffffff2 36 45 7f ffffffc73 2f 26 1c 10 14 12 ffffe0 4f ffffc0 ffffc0 ffffc0 ffffc0 ffffc0 ffffc6 ffffc0 ffffc6 ffffc0 ffffc6 ffffc9 ffffc0 ffffc6 374 ffffc3 ffffc3 ffffc4 5e 5c ffffc5 ffffc6 31 74 ffffc3 fffff2 ffff8a 43 fffff3 ffff8b 10 74 28 53

当我将缓冲区定义为

时,代码可以工作:
unsigned char buffer[64];

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

我在这里错过了什么?

您的体系结构有带符号的char。当作为变进函数参数传递时,每个秩小于int的整数类型都会提升为intunsigned int。签名晋级保留签名。这就是为什么你将0xFFFFFF前置到超过128 (0x80)的值。

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

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