美文网首页
弄清字节序

弄清字节序

作者: geverway | 来源:发表于2017-04-21 17:13 被阅读7次

假定有两字节变量: short a=0x52AE,字节序讨论的就是某个包含多字节的基本类型(单元)中,字节的存放顺序
那么,字节序要确定的就是 short 型中,两个字节的存放顺序:
低字节放在低地址就是,小端序
高字节放在低地址就是,**大端序 **

1、小端方式存储


         地址增大方向   --------->
  0x0000   0x0001   0x0002  ...  0xFFFF
+--------+--------+--------+...+--------+
|   AE   |   52   |   \    |...|   \    |
+--------+--------+--------+...+--------+
                ||
                  ||
                \/
+--------+--------+--------+...+--------+
|10101110|01010010|   \    |...|   \    |
+--------+--------+--------+...+--------+

Note:图片格式 bmp,音频格式 wav 等内部数据存储使用的都是小端序

2、大端方式存储

          地址增大方向   --------->
  0x0000   0x0001   0x0002  ...  0xFFFF
+--------+--------+--------+...+--------+
|   52   |   AE   |    \   |...|    \   |
+--------+--------+--------+...+--------+
                ||
                  ||
                \/
+--------+--------+--------+...+--------+
|01010010|10101110|   \    |...|   \    |
+--------+--------+--------+...+--------+

Note: 网络字节序就是使用大端序。因此再像 socket 写入数据时,需要将数据调整为大端序

字节序影响只单元(如基本数据类型 Integer)内字节的存放顺序,而单元间的顺序不受影响

一个判断字节序的 c 程序:

#include <stdio.h>

int main(int argc, char **argv) {

   union {
      short s;
      char c[sizeof(short)];
   }un;
    
   un.s = 0x0102;
   
   if (sizeof(short) == 2) {
      if (un.c[0] == 1 && un.c[1] == 2)
         printf("big-endian\n");
      
      else if (un.c[0] == 2 && un.c[1] == 1)
         printf("little-endian\n");
      
      else
         printf("unknown\n");
   }
   else {
      printf("sizeof(short) = %d\n", sizeof(short));
   }
}

参考

[1] Byte Ordering

相关文章

  • 弄清字节序

    假定有两字节变量: short a=0x52AE,字节序讨论的就是某个包含多字节的基本类型(单元)中,字节的存放顺...

  • 弄清字节序

    BigEndian、LittleEndian 字节在内存地址中的存放顺序,简称字节序。 弄清概念 网络上常把把 E...

  • Linux的socket API基本操作

    1.socket地址API 主机字节序和网络字节序 字节序分为大端字节序和小端字节序 大端字节序 = 一个整数的高...

  • C语言字节序转换API

    主机字节序转网络字节序 网络字节序转主机字节序 将字符串IP地址转换为网络字节序的整型数据 将网络字节序数据转换为...

  • 内存序、字面量、动态规划

    内存字节序 确认内存字节序 /* 确定你的电脑是大端字节序还是小端字节序 */include int check...

  • socket编程基础

    字节序 字节序分为大端字节序和小端字节序大端字节序: 是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内...

  • 深入理解Emoji(二) —— 字节序和BOM

    上篇主要了解了字符集和字符集编码的相关知识,其中有提到字节序的问题,这篇我们便深入探讨下这方面的知识。 字节序 字...

  • Linux高性能服务器入门

    第五章 Linux网络编程基础API 主机字节序和网络字节序 <5.1.1>Q:设定主机字节序和网络字节序是为了解...

  • 一文搞懂序列化与反序列化

    一、是什么 序列化:就是将对象转化成字节序列的过程。 反序列化:就是讲字节序列转化成对象的过程。 对象序列化成的字...

  • Linux高性能服务器开发

    公众号:畅游码海 更多高质量原创文章都在里面~ 主机字节序和网络字节序: 在32位机器上,累加器一次能装载4个字...

网友评论

      本文标题:弄清字节序

      本文链接:https://www.haomeiwen.com/subject/ioodzttx.html