将十六进制数解析为数组

the*_*ive 1 c

我有一个变量char* etag="8a964ee2a5e88be344f36c22562a6486";.

如何将其转换为数组byte,byte实际上在哪里typedef unsigned char byte

Vau*_*ato 6

byte bytes[16];
int i=0;
for (;i<16;++i) {
  int value;
  sscanf(etag+2*i,"%02x",&value);
  bytes[i] = value;
}
Run Code Online (Sandbox Code Playgroud)

  • @ H2CO3 - 给他带来疑问的好处,他只在你发布后几分钟发布,他的回答与你的不一样,将你的答案转化为他需要三分多钟,所以我不这样做相信他确实抄袭了你.所以我给你们两个+1.希望对你有些安慰. (2认同)

小智 5

如果我理解正确,你想要将16个字母的十六进制字符组组成字节,然后将这些字节存储在char数组中.试试这个:

char *str = "long hex string";

int i;
unsigned char bytes[16];
char tmp[3] = { 0 };
for(i = 0; i < 16; i++)
{
    memcpy(tmp, str + 2 * i, 2);
    bytes[i] = (unsigned char)strtol(tmp, NULL, 16);
}
Run Code Online (Sandbox Code Playgroud)