计算数组内的十六进制偏移量
calculate hexadecimal offset within array
我大致知道什么是偏移量,但我对以下数组的偏移量有疑问。假设我有一个 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
等等
还是我理解有误?
您的元素具有给定的大小,如您的大小列所述。所以基本上这告诉你的是:
Version 从偏移量 0x00(也就是位置 0)开始,大小为 1,因此它是第一个元素:0xCB
Timestamp 从偏移量 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.
如何将每个字节序列解释为正确的类型取决于您。
这有意义吗?
我大致知道什么是偏移量,但我对以下数组的偏移量有疑问。假设我有一个 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
等等
还是我理解有误?
您的元素具有给定的大小,如您的大小列所述。所以基本上这告诉你的是:
Version 从偏移量 0x00(也就是位置 0)开始,大小为 1,因此它是第一个元素:0xCB
Timestamp 从偏移量 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.
如何将每个字节序列解释为正确的类型取决于您。
这有意义吗?