我是 C 的新手,期望输出为 8575
,但输出为 19285
。任何人都可以帮助解决这里可能出现的问题吗?
int main()
{
uint8_t a[4] = {85,75,95,65};
uint16_t *p = a;
uint16_t q = (p[0]);
printf("%u",(unsigned int)(q));
return 0;
}
//新问题
typedef struct{
uint32 a[4];
}x;
/*declare an object of x type*/
x *block2;
uint8 b[64] = {0x01 , 0x02 , 0x03.....0x64}
Api-1
converts b into block* type by
block2 = (x*) b;
这个 block2 会是什么样子?
最佳答案
您的代码行为未定义(将 uint8_t *
视为 uint16_t *
)。
话虽如此,您的代码还有另外两个问题,首先,您的机器似乎是小端,例如最低有效字节位于最低地址 (LSB),这是大多数机器的情况。其次,您有两个字节 - 85
和 75
,您希望得到 8575
,将每个字节视为 100 的幂( 85 * 100 + 75 = 8575
) 而字节是 256 的幂 (85 * 256 + 75 = 21835
)
考虑到这些事实,我们得到结果数:75 * 256 + 85 = 19285
当缓冲区的字节序已知时(在本例中为大字节序),转换此类数据的一种安全方法是分别处理每个字节:
uint8_t buff[] = {1, 2, 4, 5};
uint16_t my16;
my16 = buff[0] << 8; // same as * 256
my16 += buff[1];
关于c - 指针输出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32977383/