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

问题描述

| 假设我的十六进制字符串。
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]=\'\\0\'
    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
具有偶数长度,and7ѭ足够 大小,以下代码是否符合目的 (尽管
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(),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+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],&tmp);
        out[i] = tmp;
    }
    //printf(\"\\n ascii value of hexa %s\",out);
}
    ,        我重复回答了同样的问题...但是可能有人会在这里发现它有用,C ++ ish
#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;
    }