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

字符字符串到C中的十六进制字符数组[重复]

赵雪峰
2023-03-14

我有一个CLinux设备,我需要转换一些数据。输入类似于

char mytest[] = "020441010C0000003131203131203131313103";

我需要

mytest2[] = {0x02,0x04,0x41,0x01,0x0C,0x00,0x00,0x00,0x31,0x31,0x20,0x31,0x31,0x20,0x31,0x31,0x31,0x31,0x03}

这是我尝试过的代码,但它不能编译,因为sstream不在设备操作系统上。有人能给我另一个转换数据的解决方案吗?

#include <iostream>
#include <sstream>


int main() {
std::string myStr = "1122AA010A";

std::stringstream ss;
int n;
for(int i = 0; i<myStr.length(); ) {
    std::istringstream(myStr.substr(i,2))>>std::hex>>n;
    ss<<(char)n;
    i += 2;
    }

std::string result = ss.str();

std::cout<<"\n"<<result<<"\n";
return 0;
}

共有1个答案

夏星阑
2023-03-14

解析十六进制非常简单。将每个数字转换为十六进制值,并将它们组合成一个字符。

int FromHexDigit(char c) //Returns a number from 0 to 15
{
    if(c >= '0' && c <= '9')
        return c-'0';
    else if(c >= 'A' && c <= 'F')
        return c-'A' + 10;
    else if(c >= 'a' && c <= 'f')
        return c-'a' + 10;
    else
        return -1; //Not a hex digit :(
}

然后主循环变成:

std::string result;
for(int i = 0; i<myStr.length(); i += 2) {
    char d1 = myStr[i], d2 = myStr[i+1]; //Those are the two consecutive hex digits
    int n = FromHexDigit(d1)*16 + FromHexDigit(d2); //Convert to a number
    result += (char)n; //Put into the result string
}

注意for循环标题中的i=2部分。我们正在处理两字节块的字符串。无法处理字符串具有奇数个字符的情况。

 类似资料:
  • 问题内容: 我将数据存储在字节数组中。如何将这些数据转换为十六进制字符串? 我的字节数组示例: 问题答案: 使用: 或使用 注意: 在format语句中,表示在必要时最多填充2个前导s。这很重要,因为它将被格式化为而不是 或与配合使用: 这是Python 3.6.1中上述方法的基准: 结果: 使用的方法的确提供了其他格式选项,例如用空格,逗号,大写字母/等分隔数字,但是会影响性能。

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

  • 我有一个十六进制值字符串,我需要将其输出到一个char数组,以便可以将其用作函数输入。 请注意,sha512(firststring)的输出将是 810dcbf236457fee732f100d261c101412e04fc08abd4cb6ddd4442a7cb690acfcae6eeec25e321d5cf5d63174a3b38b31c0143a5702f5f28a43f38b1074285

  • 问题内容: 我有一个很长的十六进制字符串,代表一系列不同类型的值。我希望将此十六进制字符串转换为字节数组,以便可以将每个值移出并将其转换为适当的数据类型。 问题答案: 假设您的十六进制字符串类似于 将其转换为字符串(Python≤2.7): 或从Python 2.7和Python 3.0开始: 请注意,这是的不变版本。

  • 问题内容: 我想转换为字节数组,但是返回32个字节而不是16个字节。 问题答案: 我认为发问者正在将十六进制值的字符串表示形式转换为表示该十六进制值的字节数组。 apache commons编解码器为此提供了一个类Hex。