Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42932
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-08 18:03
文章分类

全部博文(11)

文章存档

2017年(8)

2016年(3)

我的朋友
最近访客

分类: LINUX

2017-04-22 11:31:17

Big-Endian & Little-Endian


字节序

  1. /**
  2.   * Big-Endian
  3.   * 高字节在低地址,低字节在高地址
  4.   * 这里以powerpc举例
  5.   * 0x11 属于高位, 存放在低地址
  6.   * 0x44 属于低位, 存放在高地址
  7.   */
  8. u-boot> mw 0x7F000000 0x11223344 1
  9. u-boot> md.b 0x7F000000 8
  10. 7f000000: 11 22 33 44 16 04 05 05 ."3D....




  11. /**
  12.   * Little-Endian
  13.   * 低字节在低地址, 高字节在高地址
  14.   * 这里以arm(默认小端)举例
  15.   * 0x11 属于高位, 存放在高地址
  16.   * 0x44 属于地位, 存放在低地址
  17.   */
  18. u-boot> mw 0x68000000 0x11223344 1
  19. u-boot> md.b 0x68000000 8
  20. 68000000: 44 33 22 11 ff ff ff df D3".....


位序

  1. //以0xCA (1100 1010(b))为例

  2. //Big-Endian
  3. 1100 1010 (MSB ---> LSB)

  4. //Little-Endian
  5. 0101 0011 (LSB ---> MSB)


大小端判别方法

点击(此处)折叠或打开

  1. enum endian {
  2.     ENDIAN_BIG = 0x00,
  3.     ENDIAN_LITTLE,
  4. };


  5. /**
  6.   * 利用union的特性来做判断
  7.   */
  8. enum endian endian_check(void)
  9. {
  10.     union check {
  11.         int i;
  12.         char ch;
  13.     } c;

  14.    
  15.     c.i = 1;
  16.     if (c.ch == 1)
  17.         return ENDIAN_LITTLE;
  18.     else
  19.         return ENDIAN_BIG;
  20. }

阅读(1247) | 评论(0) | 转发(0) |
0

上一篇:linux printf 格式化输出

下一篇:memtester工具

给主人留下些什么吧!~~