C int内存存储。最低有效位与最高有效位?

C int内存存储。最低有效位与最高有效位?,c,memory,int,uint8t,uint16,C,Memory,Int,Uint8t,Uint16,当我在内存中连续组合两个uint8\u t(0x00和0x01)到一个uint16\u t时,我希望下面的组合给我一个0x0001的值。相反,我得到了0x0100=256,这让我感到惊讶 #include <stdio.h> #include <stdint.h> int main(void){ uint8_t u1 = 0x00, u2 = 0x01; uint8_t ut[2] = {u1, u2}; uint16_t *mem16 = (

当我在内存中连续组合两个
uint8\u t
(0x00和0x01)到一个
uint16\u t
时,我希望下面的组合给我一个0x0001的值。相反,我得到了0x0100=256,这让我感到惊讶

#include <stdio.h>
#include <stdint.h>

int main(void){

    uint8_t u1 = 0x00, u2 = 0x01;
    uint8_t ut[2] = {u1, u2};
    uint16_t *mem16 = (uint16_t*) ut;

    printf("mem16 = %d\n", *mem16);

    return 0;
}
#包括
#包括
内部主(空){
uint8_t u1=0x00,u2=0x01;
uint8_t ut[2]={u1,u2};
uint16_t*mem16=(uint16_t*)ut;
printf(“mem16=%d\n”,*mem16);
返回0;
}
有人能解释一下我目前对C内存的理解中遗漏了什么吗?
谢谢!:-)

它被称为
endianess


现在大多数系统都使用小端点。在此系统中,首先存储最低有效字节。因此,0x0100被存储(假设2个字节表示)为
{0x00,0x01}
,与您的情况完全相同

它被称为
endianess


现在大多数系统都使用小端点。在此系统中,首先存储最低有效字节。因此,0x0100被存储(假设2字节表示)为
{0x00,0x01}
,与您的情况完全相同

ut[0]被插入到mem16的LSB上,而ut[1]被插入到MSB上。

ut[0]被插入到mem16的LSB上,而ut[1]在MSB上。

Google endianess。取决于CPU,然后研究Google vararg+defaul提升。在x86系统中,16位字(以及所有类型的整数)以小的ENDIAN字节顺序排列。字节0(第一个)是低阶字节,字节N(本例中N=1)是高阶字节。Google Endianness.取决于CPU,然后研究Google vararg+defaul提升。在x86系统中,16位字(以及所有类型的整数)是小ENDIAN顺序字节。字节0(第一个)是低阶字节,字节N(本例中N=1)是高阶字节。这并不能真正解释OP缺少了什么,是吗?这并不能真正解释OP缺少了什么,是吗?