当前位置: 首页 > 知识库问答 >
问题:

将十六进制字符串转换为字符数组[重复]

欧阳智志
2023-03-14

我有一个十六进制值字符串,我需要将其输出到一个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

但是,此代码将改为打印:

FFFFFF 81 0d FFFFFF CB FFFFFFFF 2 36 45 7f FFFFFF EE 73 2f 10 0d 26 1c 10 14 12 FFFFFF E0 4f FFFFFF C0 FFFFFFFF 8A FFFFFFFF BD 4c FFFFFFFF B6 FFFFFFFFFF DD FFFFFFFF D4 44 2a 7c FFFFFF B6 FFFFFFFFFF 90 FFFFFFFFFFFFFFFF AE 6e FFFFFFFFFFFFFFFF EE C2 5e 32 1d FFFFFFFFFFFFFF 5 FFFFFFFFFFFFFFFF D6 FFFFFFFFFFFFFFFFFFFFFFFFF6 FFFFFFFFFFF6 FFFFFFFFFFFFFFFF B3 8B 31 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 FFFFFFFFFFFFFFFFFFFFffffff8b 10 74 28 53

当我将缓冲区定义为:

unsigned char buffer[64];

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

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

共有1个答案

范翰飞
2023-03-14

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

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

printf("%02x", (uint8_t)buffer[i])
 类似资料:
  • 我有一个表示十六进制数的字符串: 我想将其转换为字符数组: 有什么方便的方法吗?如果有帮助,我可以使用c 11功能。 动机:我需要使用2字节字符数组保存一个整数(4字节)。我认为可以这样做的方法是使用std::hex将其转换为字符串,然后将字符串转换为char数组,但这是我无法继续的地方。。如果有另一种简单的方法——我想听听:) 重要提示:我可以假设十六进制数小于0xFFFF,并且是一个正数。

  • 将可变长度十六进制字符串(例如,转换为包含该数据的字节数组的最佳方式是什么。 即转换: 进入这个 还是这个 因此,当我将此写入一个文件并将其写入hexresp-C时,我将得到包含的二进制数据。

  • 问题内容: 要将String转换为十六进制,我正在使用: 在此处投票最高的答案中对此进行了概述:在Java中将 字符串转换为十六进制 我该如何反向执行,即将十六进制转换为字符串? 问题答案: 您可以从转换后的字符串中进行重构,这是一种实现方法: 另一种方法是使用,从包: 单元测试以验证: 注:领先剥离的仅仅是必要的,因为的你的填充方法。如果您不介意将其替换为简单的,则可以将此行放在:

  • 问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示:

  • 我需要以十六进制表示形式将字符串转换为字节数组。例如: 值:06000002我需要的是: 如何做到这一点?

  • 问题内容: 我在ex中有整数。16,我正在尝试将此数字转换为十六进制数字。我试图通过使用十六进制函数来实现此目的,但是每当您向十六进制函数提供整数时,它都会返回十六进制数字的字符串表示形式, 有人可以告诉我如何将字符串格式的十六进制数字转换为简单的十六进制数字。 谢谢!! 问题答案: