计算机字节的大小端判断

最近在学习微机接口技术和网络编程基础,在这两门学科里都提到计算机字节的大小端判断问题

什么是大小端呢?

如果在连续的两个地址空a,a+1面存入一个占用这两个空间的整数。以十六位数为例 0x0102   如果a里面是01 则说明是大端存储  如果a里面是02则说明是小端存储

c语言代码:

#include <stdio.h>
union {
  short num;
  char num1[sizeof(short)];
} un;

int main(int argc,char **argv)

{
  un.num = 0x0102;
  if (sizeof(short)==2)
  {
    if(un.num1[0] == 1 && un.num1[1] == 2)
      printf("big-endian");
    else if(un.num1[0] == 2 && un.num1[1] == 1)
        printf("little-andian");
      else
        printf("erro!");
  }
  else
    printf("erro!");

return 0;

}

汇编代码实现:

include io32.inc
.data
  msg1 byte ‘big-endian‘,13,10,0
  msg2 byte ‘little-endian‘,13,10,0

  num word 1234h
.code
start:
  xor ebx,ebx
  mov bl,byte ptr num
              ;mov eax,ebx
              ;call dispuid
  cmp bl,12h
  je loop1
  mov eax,offset msg2

  jmp loop2

  loop1:
  mov eax,offset msg1
  loop2:
  call dispmsg

  exit 0
end start

时间: 2024-10-05 05:58:41

计算机字节的大小端判断的相关文章

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

一起talk C栗子吧(第一百五十二回:C语言实例--计算机中的大小端)

各位看官们,大家好,上一回中咱们说的是socket通信地址的例子,这一回咱们说的例子是:计算机中的大小端 .闲话休提,言归正转.让我们一起talk C栗子吧! 大小端据说来源于小说<格列佛游记>,书中说:人们在争论打开鸡蛋的方式是从鸡蛋的大端还是小端打开鸡蛋.争论不休,甚至还引起了战争.你说说,不管你从哪一端打开鸡蛋,打开的都是鸡蛋呀,这有什么可以争论的呢?还要通过战争来解决.大家不必关注这个争论,如果真想了解其中的细节,可以看看这部小说.不过在计算机中的大小端就不像小说中争论打开鸡蛋那么简单

htons、htonl与字节序大小端

判断字节序大小端code #include <stdio.h> int main() { if (htons(1) == 1) printf("big endian\n"); else printf("little endian\n"); return 0; } int main() { printf("0x%x\n", htons(0x9225)); printf("0x%x\n", htonl(0x9225))

计算机存储的大小端模式解析

http://blog.csdn.net/hackbuteer1/article/details/7722667 原作者文章链接,写得很好,没必要再重新分析了,看这个就够了.一般在<计算机组成原理>,或者<微机原理>,或者<汇编语言>等课程中也会有介绍,不过没有这么详细透彻罢了.红色笔记是我的注解. --------------------------------------------------------------------------------------

【C语言】大小端判断。

(一)联合体判断大小端 首先大小端是什么? 如果我们判断第一个字节里存放的是不是 数字1,那么就可以确定其存储方式. #include <stdio.h> union DX { int a; char c; }un; int main () { un.a = 1; if(un.c == 1) { printf("小端存储\n"); } else { printf("大端存储\n"); } return 0; } (二)用指针判断大小端 #include

认识计算机中的大小端模式

前言 在java中java.nio包下有一个类是ByteOrder,这是什么东东,相信有很多人不知道.在我看了关于java.nio中有本书中就介绍到了.我努力的回忆我大学课本中学到过吗,好像没有.这是计算机理论方面的知识了.百度百科中就有关于"大小端模式的介绍".猛击这里吧 大小端模式的定义 大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放: 小端模式,是指数据

大小端判断

bool checkCPU() { union w { int a; char c; }t; t.a = 1; return (t.c == 1); } 注:大端从高位内存开始存储数据小端从低位内存开始存储数据.上例如果返回true,则为小端,false为大端.

CPU大小端判断

两种方式:1.通过指针         2.通过联合体,联合体里面的数据都是按顺序存储的,而且不论联合体里面有多少数据类型,联合体长度是最长的数据类型的长度.不论初始化多少联合体里面的数据,有效的是最后一个初始化数据,因为联合体里面的各种数据类型共用相同的地址,都从相同的地址开始存放. 1 1 #include<stdio.h> 2 2 union Data{ 3 3 char ch; 4 4 short data; 5 5 }; 6 6 union Data u_Data; 7 7 //ju

请讲普通话——一场关于异构平台通信的风波(粘包&#183;大小端方式&#183;网络字节序)

一.引子 前段时间用StriveEngine做一个信息采集系统,服务器是Windows的,客户端是各种单片机,以及Unix等等平台.这些异构的平台,被我召集起来“加强对话, 扩大共识, 深化合作”.都说有人的地方就有江湖,讲真,机器世界也一样!这些异构的平台,平日里各自为政,井水不犯河水,倒也相安无事.如今群雄会盟,共商大计,如我所料,势必会上演一波真正的血雨腥风! 就像新闻联播里常说的,“加强对话, 扩大共识, 深化合作”,首先得“加强对话”吧. 看着各位爷陆续到场,我稍稍清了清嗓子,不揣冒昧