如何将十六进制字符串分配给char[]变量

How can I assign hex string to a char[] variable?

本文关键字:char 变量 分配 十六进制 字符串      更新时间:2023-10-16

假设我的十六进制字符串。hexStr = "aecf"

如何将十六进制字符串值分配给unsigned char myChar[],如下所示。谢谢

myChar[0] = 0xae;
myChar[1] = 0xcf;

您可以按如下方式转换数据:

    char* hexstr="aecf";
    int hexsize=strlen(hexstr);
    unsigned char* myChar = new unsigned char[hexsize/2+1];
    myChar[hexsize/2]=''
    for (int i=0,intj=0;i<hexsize;i+=2,j++)
    {
        int tmp;
        sscanf(hexstr+i, "%2x",&tmp));
        myChar[j]=tmp; // warning, ignore it
    }

这是为了防止您不使用静态字符串,否则使用其他答案。

您是从一个字符串开始,然后尝试将其转换为字节数组吗?如果是,请复制字符串,每2个字符附加一个\x。字符串垃圾可以有\x来表示十六进制字符,如myStringLitterial="\xAE\xCF";

char myChar[] = { 0xAE, 0xCF };

除非你自己解析,否则没有什么魔法可以让字符串文字读成二进制,然而,有一种老式的数组文字,考虑到C的弱类型,似乎在很多情况下都能工作。

C方式(使用std::sprintf):

#include <cstdio>
/* ... */
const char *hexStr = "aecf";
unsigned char myChar[3];
std::sprintf (myChar, "%02x%02x", hexStr);

假设hexStr有偶数长度,myChar有足够的尺寸,下面的代码符合目的吗(尽管strtol是C函数)?

#include <string>
#include <cstdlib>
int main() {
  std::string hexStr = "aecf";
  unsigned char myChar[2];
  for ( unsigned i = 0;  i < hexStr.size();  i += 2 )
    myChar[ i / 2 ] = strtol( hexStr.substr( i, 2 ).c_str(), 0, 16 );
}

我一直在寻找同样的东西,在读了很多之后,终于创建了这个函数

// in = "63 09  58  81" 
void hexatoascii(char *in, char* out, int len){
    char buf[5000];
    int i,j=0;
    char * data[5000];
    printf("n size %d", strlen(in));
    for (i = 0; i < strlen(in); i+=2)
    {
        data[j] = (char*)malloc(8);
        if (in[i] == ' '){
            i++;
        }
        else if(in[i + 1] == ' '){
            i++;
        }
        printf("n %c%c", in[i],in[i+1]);
        sprintf(data[j], "%c%c", in[i], in[i+1]);
        j++;
    }
    //printf("n data %c", data);
    for (i = 0; i < j-1; i++){
        int tmp;
        printf("n data %s", data[i] );
        sscanf(data[i], "%2x", &tmp);
        out[i] = tmp;
    }
    //printf("n ascii value of hexa %s", out);
}

我重复回答了同样的问题。。。但可能有人会发现它在这里很有用,一个C++风格的

#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();
    //could also use ss.str().c_str() to get the c-ish result
    std::cout<<"n"<<result<<"n";
    return 0;
    }