计算数组

时间:2017-12-06 11:57:16

标签: 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

或者我解释错了吗?

1 个答案:

答案 0 :(得分:0)

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

版本从偏移 0x00 (又名,位置0)开始,大小为1,因此它的第一个元素是: 0xCB < / p>

时间戳从偏移 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.

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

这有意义吗?