C 从uint_16t转换后的uint8_t值

C 从uint_16t转换后的uint8_t值,c,uint,uint8t,uint16,C,Uint,Uint8t,Uint16,我必须为学校做一个小作业。我用C写这篇文章。问题是: 给定 p[3]的值是多少 我做了一些研究,发现这些数字会用little endian重新输入我的电脑。所以 p[] = {171, 67, 207, 255} 但是,当我打印p[]时 p[0] = 206 p[1] = 171 p[2] = 254 p[3] = 67 我对此感到非常困惑,有人能告诉我为什么会发生这种情况吗?所以,jsut要明确一点——在一个小小的endian Machine中,这个声明: uint16_t A[] = {

我必须为学校做一个小作业。我用C写这篇文章。问题是:

给定

p[3]
的值是多少

我做了一些研究,发现这些数字会用little endian重新输入我的电脑。所以

p[] = {171, 67, 207, 255}
但是,当我打印
p[]

p[0] = 206
p[1] = 171
p[2] = 254
p[3] = 67

我对此感到非常困惑,有人能告诉我为什么会发生这种情况吗?

所以,jsut要明确一点——在一个小小的endian Machine中,这个声明:

uint16_t A[] = { 0xabce, 0x43fe, 0xcf54, 0xffff };
将在内存中按顺序排列这些字节:

ce | ab | fe | 43 | 54 | cf | ff | ff |
(十进制):

所以,当你告诉编译器,从内存中相同的位置开始,你可以读取一个字节长的数字,在你的“p”向量中可以检索到的是上面的8个数字

uint8_t *p = (uint8_t *)&A[0];
(也可以简单地编写
uint8_t*p=(uint8_t*)A;


请记住,在C语言中,开发人员的任务是知道向量的长度。在本例中,例如,可能有一种约定,即数字“0xffff”将结束16位序列。无论哪种方式,您都有两倍于8位的元素要读取。

您很清楚
p[0]
p[1]
都将指向[0]的单独字节。强制转换指针不进行转换
p[0]
A[0]
的第一个字节,
p[1]
A[0]
的第二个字节,
p[2]
A[1]
的第一个字节,等等。
uint8\u t
不是字符类型,因此这是未定义的行为。@ColonelThirtyTwo谢谢!我懂了now@Ben谢谢你,伙计!我现在明白了,其实很简单:D
206|171 |254 | 67 | 84 | 207| 255| 255|
uint8_t *p = (uint8_t *)&A[0];