【发布时间】:2010-05-18 12:20:31
【问题描述】:
我已经找到了很多不同的解决方案来解决这个问题,但并不是所有的解决方案都有效,而且很多解决方案看起来有些笨拙和效率低下。基本上我有一串十六进制数据(即“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;
【问题讨论】:
-
您能否简要说明一下您尝试过的几种方法以及该代码应该适合什么类型的上下文?
-
(也许不是最好的,但肯定是最短的;)Code golf - hex to (raw) binary conversion的可能副本
-
zaf,这正是我想要的,抱歉我之前没看到。我想这在某种程度上是一个副本。
-
没有必要将
&result[i++]转换为(unsigned int *)- 它已经具有该类型。此外,您没有为result分配足够的空间 - 您需要将calloc调用中的最后一个, 1)替换为sizeof *result。