将十六进制字符串转换为字符数组
Convert hex string to char array
我有一个十六进制值的字符串,我需要它输出到一个字符数组,以便它可以用作函数输入。
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
的整数类型都会提升为int
或unsigned int
。签名晋级保留签名。这就是为什么你将0xFFFFFF
前置到超过128 (0x80
)的值。
您可以通过将值转换为unsigned char
或更好的uint8_t
来解决显示问题:
printf("%02x", (uint8_t)buffer[i])
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?