You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统下所有C语言数据类型的字节序情况咨询

Windows系统下C语言数据类型的字节序情况

Windows运行的主流x86/x86_64架构平台统一采用小端字节序(Little Endian),所有多字节的C语言基本数据类型均遵循这一规则。

小端字节序的核心逻辑

小端模式下,数据的最低有效字节(LSB)存储在内存的最低地址,最高有效字节(MSB)存储在内存的最高地址。比如一个int值0x12345678,在起始地址为0x00的内存中,存储顺序为:
0x00: 0x78, 0x01: 0x56, 0x02: 0x34, 0x03: 0x12

各数据类型的字节序细节

整数类型

  • char:单字节,无字节序问题
  • short(2字节)、int(4字节)、long(x86下4字节,x86_64下8字节)、long long(8字节):全部采用小端存储
  • 无符号整数类型(unsigned short/unsigned int等):与对应有符号类型字节序完全一致,仅数值解读方式不同

浮点类型

  • float(4字节)、double(8字节):遵循IEEE 754标准,在Windows平台以小端模式存储字节。比如double值的符号位、指数位、尾数位对应的字节,按小端顺序排布在内存中。

指针类型

  • 32位系统下指针占4字节,64位系统下占8字节:本质是内存地址的整数表示,遵循整数的小端存储规则。

自定义类型(结构体/联合体)

  • 结构体的每个多字节成员各自按小端存储,成员间的内存布局受编译器对齐规则影响,但单个成员的字节序不受对齐干扰。
  • 联合体的多字节成员同样遵循小端规则,共享内存区域的字节按小端逻辑解读。

验证代码示例

可以通过以下C代码直接查看内存中的字节排布,验证小端序:

#include <stdio.h>

int main() {
    int val = 0x12345678;
    unsigned char* ptr = (unsigned char*)&val;
    
    printf("int值0x12345678的内存字节(低地址到高地址):\n");
    for(int i = 0; i < sizeof(int); i++) {
        printf("0x%02X ", ptr[i]);
    }
    // 输出应为:0x78 0x56 0x34 0x12
    
    double fval = 1.0;
    unsigned char* fptr = (unsigned char*)&fval;
    printf("\ndouble值1.0的内存字节:\n");
    for(int i = 0; i < sizeof(double); i++) {
        printf("0x%02X ", fptr[i]);
    }
    // 输出应为:0x00 0x00 0x00 0x00 0x00 0x00 0xF0 0x3F
    
    return 0;
}

注:Windows平台的编译器(如MSVC、MinGW)均默认采用小端编译,无需额外配置。

内容的提问来源于stack exchange,提问作者Thomas Pazhaidam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:55:22