2017-08-07 314 views
0

我有字符串十六进制ex。 std :: string x =“68656c6c6f”; 我想将它转换为字符数组 数组中的每个元素是2个十六进制数字 前。从十六进制字符串转换为十六进制字符数组

char c[5]={0x68,0x65,0x6c,0x6c,0x6f} ; 

我使用C++和我已经有十六进制数字的字符串和我没有读值作为字符数组的选项。 我不能使用scanf("%x",&c[i]);

+0

你应该表现出你已经尝试过自己,或者你有什么研究,或为什么要难倒(这是相当容易出现许多可能的解决方案)。现在你的“问题”要么是“请为我做我的工作”或者“我需要一些关于如何做到这一点的模糊提示”,并且这两者都不适合堆栈溢出。 – hyde

+2

另外,C或C++?他们是不同的语言。请删除一个标签。 'string'是C++,如果你的意思是'std :: string'。 – hyde

+0

提示:看看'std :: stoi'和类似。 –

回答

0

C(将用C工作++以及)

int cnvhex(const char *num, int *table) 
{ 
    const char *ptr; 
    int index = (num == NULL || table == NULL) * -1; 


    size_t len = strlen(num); 

    ptr = num + len - 2; 
    if (!index) 
    { 
     for (index = 0; index < len/2; index++) 
     { 
      char tmp[3] = { 0, }; 

      strncpy(tmp, ptr, 2); 
      if (sscanf(tmp, "%x", table + index) != 1) 
      { 
       index = -1; 
       break; 
      } 
      ptr -= 2; 
     } 
     if (index != -1 && (len & 1)) 
     { 
      char tmp[2] = { *num, 0}; 

      if(sscanf(tmp, "%x", table + index++) != 1) index = -1; 
     } 
    } 
    return index; 
} 
相关问题