高字节在前(Big-Endian)是什么意思?

motiandalou 2011-08-23 01:59:12
高字节在前(Big-Endian)是什么意思?
1的二进制为:
0000 0001
这是不是高字节在前?
...全文
2082 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacobvv 2012-12-22
  • 打赏
  • 举报
回复
引用 4 楼 luciferisnotsatan 的回复:
int a = 0x12345678 大端,内存里就是 0x12 0x34 0x56 0x78 小端,内存里就是 0x78 0x56 0x34 0x12
正解
引用 24 楼 jernymy 的回复:
引用 5 楼 uestcrc 的回复:Big-Endian 是指 高字节存放在高地址 如:内存地址 存放内容 0x4000 0x12 0x4001 0x34 littele-Endian 指高字节存放在第地址 如:内存地址 存放内容 0x4000 0x34 0x4001 0x……
说反了,Big-Endian 是指 高位存放在低地址;littele-Endian 指 高位存放在高地址;例子是正确的。 大部分处理器都是littele-Endian存储方式。和软件无关。当然在处理流和数字的时候会扯上这个概念,最近在搞数据填充用到了
zw1270644192 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luciferisnotsatan 的回复:]
int a = 0x12345678
大端,内存里就是
0x12 0x34 0x56 0x78
小端,内存里就是
0x78 0x56 0x34 0x12
[/Quote]

+++
天蛾糊 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 jernymy 的回复:]
引用 5 楼 uestcrc 的回复:
Big-Endian 是指 高字节存放在高地址
如:内存地址 存放内容
0x4000 0x12
0x4001 0x34

littele-Endian 指高字节存放在第地址
如:内存地址 存放内容
0x4000 0x34
0x4001 0x12

++
[/Quote]
存放数据占内存的高低字节,由系统决定
jernymy 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 uestcrc 的回复:]
Big-Endian 是指 高字节存放在高地址
如:内存地址 存放内容
0x4000 0x12
0x4001 0x34

littele-Endian 指高字节存放在第地址
如:内存地址 存放内容
0x4000 0x34
0x4001 0x12
[/Quote]
++
孤独小剑 2011-08-25
  • 打赏
  • 举报
回复
1 == (unsigned char)1
这句可以判断大端小端
圣诞老人123 2011-08-24
  • 打赏
  • 举报
回复
查下
大端 小端就知道了
炼气士 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 motiandalou 的回复:]

C/C++ code
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
unsigned char bit_1 : 1;
unsigned char bit_2 : 1;
unsigned char bit_3 : 1;
unsigned char bit_4 : 1;
unsigned c……
[/Quote]

在C和指针的书中看到的定义,是bit_1在最下面,bit_8在最上面,这样测试应该是正常了,但至于为什么,我也不清楚,抛个问题先...
用户 昵称 2011-08-23
  • 打赏
  • 举报
回复
对于这类问题,俺一向是先从百度百科上看典故,小人国的典故。
proorck6 2011-08-23
  • 打赏
  • 举报
回复
建议把数据写到硬盘上,再用UltraEdit的二进制查看功能看一看,一切都明白了。
用这个函数 fwrite(obj,size,n,fp);
5t4rk 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luciferisnotsatan 的回复:]

int a = 0x12345678
大端,内存里就是
0x12 0x34 0x56 0x78
小端,内存里就是
0x78 0x56 0x34 0x12
[/Quote]

就是存数据时的顺序
motiandalou 2011-08-23
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
unsigned char bit_1 : 1;
unsigned char bit_2 : 1;
unsigned char bit_3 : 1;
unsigned char bit_4 : 1;
unsigned char bit_5 : 1;
unsigned char bit_6 : 1;
unsigned char bit_7 : 1;
unsigned char bit_8 : 1;
}bit;

int main()
{
int *p_int=NULL, len=sizeof(int);
bit *p_bit=(bit *)malloc(len*sizeof(bit));
p_int=(int *)p_bit;
*p_int=0;

printf("请输入一个整数:");
scanf("%d",p_int);
for(len=0;len<4;len++)
printf("%d%d%d%d%d%d%d%d ",
(p_bit+len)->bit_1, (p_bit+len)->bit_2,
(p_bit+len)->bit_3, (p_bit+len)->bit_4,
(p_bit+len)->bit_5, (p_bit+len)->bit_6,
(p_bit+len)->bit_7, (p_bit+len)->bit_8) ;
printf("\n");
free(p_bit);
return 0;
}


上面的代码你们测试一下,1的二进制确实是10000000 00000000 00000000 00000000
iambic 2011-08-23
  • 打赏
  • 举报
回复
vc6大端?不太可能吧。资料在哪里?要多奇葩的编译器才能逆反物理架构啊。蠢如vc6也难以相信。
hu7324829 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 motiandalou 的回复:]
用一个程序计算出1的二进制是这样的:
10000000 00000000 00000000 00000000
请问这是大端还是小端啊?
[/Quote]
这怎么也不能是1。。

00000001 00000000 00000000 00000000还差不多
motiandalou 2011-08-23
  • 打赏
  • 举报
回复
用一个程序计算出1的二进制是这样的:
10000000 00000000 00000000 00000000
请问这是大端还是小端啊?
empare 2011-08-23
  • 打赏
  • 举报
回复
我也补下吧:使用Little Endian方式存储数据时,数据的LSB相对最没意义的数据位,存放在低地址位置;而使用Big Endian方式存储数据时,数据的MSB最有意义的数据位,存放在低地址位置。
tyr 2011-08-23
  • 打赏
  • 举报
回复
lz自己搞定了,可以结了。
不是大,就是小,实际使用的时候查下,测试下应该就知道了。
motiandalou 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 motiandalou 的回复:]
引用 4 楼 luciferisnotsatan 的回复:
int a = 0x12345678
大端,内存里就是
0x12 0x34 0x56 0x78
小端,内存里就是
0x78 0x56 0x34 0x12

越说越糊涂了,0x12345678转换成二进制后为:

10010001101000101011001111000

根据你的说法:
大端,内存里就是
0x1……
[/Quote]
查了查,发现虽然INTEL的CPU采用的是小端,但是VC6.0采用的是大端,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。。。。。。。。。。。。。。。
赵4老师 2011-08-23
  • 打赏
  • 举报
回复
先弄清楚一个字节多少二进制位再说。
Jade0709 2011-08-23
  • 打赏
  • 举报
回复
这需要搞清楚地址往哪边增长。

如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。

地址偏移 大端模式 小端模式
0x00 12(MSB) 78 (LSB)
0x01 34 56
0x02 56 34
0x03 78(LSB) 12(MSB)


motiandalou 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luciferisnotsatan 的回复:]
int a = 0x12345678
大端,内存里就是
0x12 0x34 0x56 0x78
小端,内存里就是
0x78 0x56 0x34 0x12
[/Quote]
越说越糊涂了,0x12345678转换成二进制后为:

10010001101000101011001111000

根据你的说法:
大端,内存里就是
0x12 0x34 0x56 0x78
即:
00010010 00110100 01010110 01111000

我是INTEL的CPU,应该是小端方式,为什么用计算器输出的是大端的二进制?
加载更多回复(6)

70,011

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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