计算数组内的十六进制偏移量

标签 c arrays hex offset

我一般知道偏移量是什么,但我对以下数组的偏移量有疑问。假设我有一个 uint8 数组:

   const myArray uint8[]=
   {
   0xCB, 0xF8, 0xFA, 0xFB, 0xCA, 0xAC, 0x24, 0x53, 0x64, 0x4F, 0x1E, 0xA2, 
   0xF9, 0x78, 0xCA, 0x63, 0xB8, 0x7F, 0xFC, 0xFB, 0xD8, 0xFA, 0xFB, 0x8F, 
   0x67, 0xC1, 0xFD, 0xF8, 0xC2, 0xF8, 0xFF, 0xF9, 0xFA, 0xE4, 0xFA, 0xF9,
   0xFB, 0xFE, 0xE4, 0xFA, 0xCA, 0xCF, 0x94, 0xD5, 0xD6, 0xCA, 0xA2, 0xA2,
   ....
   ....
   ....
   ....
}

现在我的描述如下:

--------------------------------------------------
| Offset in myArray | meaning     |  size (Byte) |
--------------------------------------------------
|    0x00           |  Version     |  1          |
-------------------------------------------------
|    0x01           |  Timestamp  |  15         |
 ------------------------------------------------
|    0x10           |  Info1      |   8         |
 ------------------------------------------------
|    0x18           |  Info2      |   2         |
 ------------------------------------------------

这在 myArray 中意味着:

对于偏移量 0x00:它是 myArray 中索引为 0 的元素,因此为 0xCB

对于偏移量0x01:它是索引为1..9的元素,所以0xF8, 0xFA, 0xFB, 0xCA, 0xAC, 0x24, 0x53, 0x64, 0x4F

等等

还是我理解错了?

最佳答案

您的元素具有给定的大小,如大小列中所述。所以基本上这告诉你的是:

版本从偏移量0x00(也称为位置0)开始,大小为1,因此它的第一个元素:0xCB

时间戳从偏移量0x01(也称为位置1)开始,大小为15,因此它的组合元素:[0xF8, 0xFA, 0xFB 、0xCA、0xAC、0x24、0x53、0x64、0x4F、0x1E、0xA2、0xF9、0x78、0xCA、0x63]

Info1 从偏移量 0x10(又名位置 16)开始,大小为 8,因此其组合元素:[0xB8, 0x7F, 0xFC 、0xFB、0xD8、0xFA、0xFB、0x8F]

Info2 从偏移量 0x18(也称为位置 24)开始,大小为 2,因此它的组合元素:[0x67, 0xC1]

就这样……

正如其他人指出的那样,您在分析中似乎出错的一件事是偏移量以 16 为基数(十六进制)。所以 0x10 是 1 * 16 + 0 = 16。

如何将每个字节序列解释为正确的类型取决于您。

这有意义吗?

关于计算数组内的十六进制偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47673759/

相关文章:

javascript - Javascript 数组未定义

java - 如何添加十六进制数

Javascript 文件渲染将 key 存储到 onload 方法中?

c - 如果仅尾随 0,则使用 printf 格式化没有小数位的 float

c - *p 和 *&p 有什么区别

c++ - C/C++ 静态库当前目录

javascript - 按特定字母对 JS 字符串数组进行排序

javascript - 从自定义字符串中提取十六进制代码数据

assembly - 如何让用户的十六进制输入在 x86 程序集(16 位 DOS)中打印为十进制?

c - 尝试通过指向常量数据的非常量指针修改数据,显示不同的错误