内存字节序问题,为什么两次打印数据的顺序是相反的?

杰瑞大杰瑞 2015-10-13 06:21:34

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
/* long longdata[2] = {0};*/
long longdata[1] = {0};

byte data[4] = {1,2,3,4};//0x01020304

printf("%d ",*(data));
printf("%d ",*(data+1));
printf("%d ",*(data+2));
printf("%d ",*(data+3));
printf("\r\n");
longdata[0] = 16909060;//0x01020304
byte* data2 = (byte*)longdata;
printf("%d ",*(data2));
printf("%d ",*(data2+1));
printf("%d ",*(data2+2));
printf("%d ",*(data2+3));
return 0;
}


结果:
1234
4321
...全文
1118 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2016-01-20
  • 打赏
  • 举报
回复
大小端,编程最基础的东西。
worldy 2015-11-06
  • 打赏
  • 举报
回复
86系统使用的是小端系统,低字节在前,高字节在后,比如 0x11223344,44在A[0],33在A[1],22在A[2],11在A[3]
「已注销」 2015-11-05
  • 打赏
  • 举报
回复
在小端 (Little Endian) CPU 上,数据是这么储存的:
BYTE bArr[] = { 0x01, 0x02, 0x03, 0x04 };
// 内存中的顺序:0x01、0x02、0x03、0x04

WORD wArr[] = { 0x0102, 0x0304 };
// 内存中的顺序:0x02、0x01、0x04、0x03

DWORD dwValue = 0x01020304;
// 内存中的顺序:0x04、0x03、0x02、0x01
即,每个基本类型中的自己序是从高到低的。如:两个 WORD 和一个 DWORD 的各字节不是不一样的。
赵4老师 2015-11-04
  • 打赏
  • 举报
回复
学会查看内存窗口是楼主的当务之急。
paschen 2015-11-04
  • 打赏
  • 举报
回复
现在CPU一般是把数字的高位存在内存的高位,数字的低位存在内存的低位
zwfgdlc 2015-11-03
  • 打赏
  • 举报
回复
一条晚起的虫 2015-11-03
  • 打赏
  • 举报
回复
// windows是小端字节序,低位在前,高位在后。
zgl7903 2015-10-15
  • 打赏
  • 举报
回复
yaozhiyong110 2015-10-14
  • 打赏
  • 举报
回复
longdata[0] = 16909060;//0x01020304

这个在windows下 内存中存的不就是 4 3 2 1 么 所以打印出来就是 4 3 2 1
笨笨仔 2015-10-14
  • 打赏
  • 举报
回复
强烈建议:要学习编程最好先去了解一下数据的存储规则。
schlafenhamster 2015-10-13
  • 打赏
  • 举报
回复
byte data[4] = {1,2,3,4};//0x01020304
longdata[0] = 0x01020304;// 低 byte 是 4,高byte是 1 (叫 " little endian ")

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧