c - 从二进制数据中获取双字

标签 c binary

char * data = 0xFF000010FFFFFFFFFFFFFFFFFFFFFFFFFFF;

我想在data[1] (0x00000010)中获取双字并将其存储在var int i中。

这样可以解决问题吗?

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

最佳答案

您试图仅添加四个字节,而不是将值放入整数的正确部分。不指定endianness由于您的平台不同,无法提供最终答案。

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

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

(大端字节序示例)

请注意,索引是从 0 开始的,而不是像示例中那样从 1 开始。本例中的“基数”是 256,因为每个字节可以表示 256 个值。

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

5234

您可以将其重写为:

5000 + 200 + 30 + 4

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

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

关于c - 从二进制数据中获取双字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8813885/

相关文章:

c - 在结构中表示小值的最有效方法是什么?

C 头文件不起作用?

C:太大的堆栈会导致段错误吗?

C 二进制文件作为数组处理

PHP以真实二进制读取二进制文件

c - C 中的 realloc 与 malloc

c++ - Arduino 编译为 C++,而不是 C

r - 使用 R 中的 glmnet 预测二进制结果的函数

c# - 迭代获取特定集合的所有子集

c++ - 整数和位数组之间的按位运算