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/