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

时间:2011-05-31 09:04:08

标签: c++ hex arrays

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

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

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

7 个答案:

答案 0 :(得分:3)

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

    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
    }

这是因为你不使用静态字符串,否则使用其他答案。

答案 1 :(得分:2)

您是以字符串开头,然后尝试将其转换为字节数组?如果是这样,请复制字符串,每2个字符附加一个\ x。字符串litterals可以在其中包含\ x来表示十六进制字符,如     myStringLitterial =“\ xAE \ xCF”;

答案 2 :(得分:1)

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

除非你自己解析它,否则没有任何魔法可以将字符串文字读成二进制,但是旧的时尚数组文字给出了C的弱类型总是在很多情况下都能正常工作。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

假设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 );
}

答案 5 :(得分:0)

我正在寻找相同的东西,经过大量阅读后,终于创建了这个功能

// 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);
}

答案 6 :(得分:0)

我在重复中回答了同样的问题......但可能有人会发现它在这里很有用,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;
    }