.Byte[] 如何作用于特定字节?

How does .Byte[] function on a specific byte?

我正在处理以下代码行:

#define WDOG_STATUS             0x0440
#define ESM_OP                    0x08  

在我定义的方法中 class 我有:

bool WatchDog = 0;
bool Operational = 0;
unsigned char i;
ULONG TempLong;
unsigned char Status;

TempLong.Long = SPIReadRegisterIndirect (WDOG_STATUS, 1); // read watchdog status
if ((TempLong.Byte[0] & 0x01) == 0x01)
  WatchDog = 0;
else
  WatchDog = 1;


TempLong.Long = SPIReadRegisterIndirect (AL_STATUS, 1);
Status = TempLong.Byte[0] & 0x0F;
if (Status == ESM_OP)
  Operational = 1;
else
  Operational = 0;

SPIReadRegisterInderect() 所做的是,它需要一个无符号的 short 作为要读取的寄存器地址,一个无符号的 char Len 作为要读取的字节数。

让我莫名其妙的是Byte[]。我假设这是一种将字节的某些部分与 Long 中的值(从 SPIReadRegisterIndirect 读取)中的值分开的方法。但为什么是 [0]?不应该是1吗?它是如何运作的?我的意思是如果它只隔离一个字节,例如对于 WatchDog 的情况,TempLong.Byte[0] 等于 04 还是 40? (当我在 if 语句之前打印值时,它显示为 0,这既不是 WDOG_STATUS 定义的寄存器中的 04 也不是 40。)

请注意我是这个主题的新手。我已经进行了 google 搜索和其他搜索,但不幸的是我找不到我想要的东西。有人可以帮助我了解此语法的工作原理或指导我阅读可以阅读的文档吗?

提前致谢。

您的 ULONG 必须在某处定义。 否则你会得到语法错误 'ULONG' does not name a type

可能是这样的:

typedef union {unsigned long Long; byte Byte[4];} ULONG;

检查你的 C / C++ 书中的 union (和 typedef ),你会看到 此联合有助于将 long 变量重新解释为字节数组。 Byte[0] 是第一个字节。取决于硬件(avr 控制器是小端)它可能是 LSB(最低有效字节)