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

C++ 将十六进制字符串转换为字符数组,c++,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];

我有一个十六进制值字符串,我需要将其输出到一个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(" ");
}
不幸的是,我无法将这个无符号字符数组传递到下一个函数中,该函数需要一个字符数组作为输入。我假设这意味着我的编译器使用带符号的字符


我错过了什么?任何帮助都将不胜感激。

您的体系结构具有带符号的
char
。当作为变量函数参数传递时,秩小于
int
的每个整数类型将提升为
int
无符号int
。签名促销保留签名。这就是为什么要将
0xFFFFFF
预先设置为超过128的值(
0x80

您可以通过将值强制转换为
unsigned char
或更好的是,
uint8\t
来解决显示问题:

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

printf(“%02x”,(无符号字符)缓冲区[i])问题是我需要有符号的字符值才能输入到下一个函数中。缓冲区中是否存储了正确的值,这只是一个显示问题?这就是为什么我建议仅对打印功能进行强制转换。您的数据是正确的,但它会在到达标准输出的过程中被修改(如回答中所述)
printf("%02x", (uint8_t)buffer[i])