c - 指针输出结果

标签 c pointers

我是 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),这是大多数机器的情况。其次,您有两个字节 - 8575,您希望得到 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/

相关文章:

c - 为什么 ctype 函数采用 int 但需要 unsigned char/EOF?

c - 在C中实现2个具有相同类型和名称但参数不同的函数

c - 在 Unix 上的 C 中,进程如何在不打开文件的情况下知道它对文件具有哪些权限?

c - C 中字符串的差异

c - 用指针计算后缀表达式?

c - 64 位可执行文件的运行速度比 32 位版本慢

c - "de-referencing a NULL pointer"到底是什么意思?

c++ - 如果我删除智能指针正在管理的指针会怎样?

c++ - 从指针打印动态 int 数组获取奇怪的字符

c - (3* - *p/(*q)+7) = 6 它是如何工作的?