从二进制数据中获取双字

时间:2012-01-11 03:46:23

标签: c binary

char * data = 0xFF000010FFFFFFFFFFFFFFFFFFFFFFFFFFF;

我想在data[1] (0x00000010)中获得DOUBLE WORD并将其存储在var int i中。

这可以解决这个问题吗?

int i = (int) data[1]+data[2]+data[3]+data[4]

2 个答案:

答案 0 :(得分:2)

您试图只添加四个字节,而不是将值放入整数的正确部分。如果没有指定平台的endianness,则无法提供最终答案。

一般方法是将每个字节放在int的正确位置,如下所示:

int i = 256 * 256 * 256 * data [0] + 256 * 256 * data [1] + 256 * data [2] + data [3]

(big endian示例)

请注意,索引是基于0的,而不是像您的示例中那样基于1。此示例中的“base”为256,因为每个字节可以表示256个值。

要理解为什么会这样,请考虑十进制数

5234

您可以将其重写为:

5000 + 200 + 30 + 4

或10 * 10 * 10 * 5 + 10 * 10 * 2 + 10 * 3 + 4

当您处理每个数字的数据时,您将该值乘以数字基数到数字位置的数字(基数10的最右边数字是10 ^ 0,然后是10 ^ 1 ,10 ^ 2等。)

答案 1 :(得分:1)

您必须从字符串转换为实际数据。考虑使用atol()或类似的东西来获取内存中的值,然后担心编辑它。