C++ 将十六进制字符串转换为字符数组
我有一个十六进制值字符串,我需要将其输出到一个char数组,以便可以将其用作函数输入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];
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])