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

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我有一个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;
}
c++ hex
1个回答
1
投票

解析十六进制很容易。将每个数字转换为十六进制值,并将它们组合成一个char。

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部分。我们用两个字节的块处理字符串。没有处理字符串具有奇数个字符的情况。

© www.soinside.com 2019 - 2024. All rights reserved.