c语言定义数组uint,c - 将uint8_t数组转换为C中的uint16_t值 - 堆栈内存溢出

这可能有助于可视化事物。 创建数组时,按顺序有两个字节。 当您打印它时,您将获得人类可读的十六进制值,这与存储它的小端方式相反。 作为uint16_t类型的小端的值1存储如下,其中a0是低于a1的地址...

a0 a1

|10000000|00000000

注意,最低有效字节是第一个,但是当我们以十六进制打印它时,右边出现最低有效字节,这是我们通常在任何机器上所期望的。

这个程序从最低有效字节开始以二进制打印一个小端和大端1 ...

#include

#include

#include

#include

void print_bin(uint64_t num, size_t bytes) {

int i = 0;

for(i = bytes * 8; i > 0; i--) {

(i % 8 == 0) ? printf("|") : 1;

(num & 1) ? printf("1") : printf("0");

num >>= 1;

}

printf("\n");

}

int main(void) {

uint8_t a[2] = {0x15, 0xaa};

uint16_t b = *(uint16_t*)a;

uint16_t le = 1;

uint16_t be = htons(le);

printf("Little Endian 1\n");

print_bin(le, 2);

printf("Big Endian 1 on little endian machine\n");

print_bin(be, 2);

printf("0xaa15 as little endian\n");

print_bin(b, 2);

return 0;

}

这是输出(这是最不重要的字节)

Little Endian 1

|10000000|00000000

Big Endian 1 on little endian machine

|00000000|10000000

0xaa15 as little endian

|10101000|01010101

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值