我发现了许多不同的解决方案,但并非所有解决方案都有效,而且许多解决方案似乎有些繁琐和低效。基本上,我有一串十六进制数据(即“55 AA 41 2A 00 94 55 AA BB BB 00 FF”),希望将其转换为原始数据。最好的方法是什么?
更新:Vicky的解决方案对我很有效,但我对其进行了修改以处理没有空格的十六进制字符串,并稍微改变了风格。
int i = 0;
char *hexString = "55AA412A009455AABBBB00FF"
char *hexPtr = hexString;
unsigned int *result = calloc(strlen(hexString)/2 + 1, sizeof *result);
while (sscanf(hexPtr, "%02x", &result[i++])) {
hexPtr += 2;
if (hexPtr >= hexString + strlen(hexString)) break;
}
return result;
&result[i++]
强制转换为(unsigned int *)
- 它已经具有该类型。此外,您未为result
分配足够的空间 - 您需要在calloc
调用中将最后一个, 1)
替换为sizeof *result
。 - caf