那么有朋友大概会使用类似下面这样的循环方法 public static string ReverseByCharBuff

时间:2022-04-11 01:23:23

A、C#大端模式和小端模式。

小端(little-endian)模式:低地点上存放低字节,高地点上存放高字节。

如0x11223344→ byte[] numBytes = new byte[]{ 0x44,0x33,0x22,0x11};

numBytes[0] = 0x44;     //低地点存放低字节

numBytes[3] = 0x11;     //高地点存放高字节

反之,高字节在前,低字节在后,则为大端模式。

反转示例:

short  num = 12;

byte[] bytes = BitConverter.GetBytes(s);

Array.Reverse(bytes);      //bytes转换为倒序(反转),可实现大端小真个转换

B、大端模式和小端模式。原文地点:https://blog.csdn.net/qqliyunpeng/article/details/68484497

作者: 李云鹏([email protected]) 

版本号: 20170330 
更新时间: <2017-04-06> 
原创时间: <2017-03-30> 
版权: 本文给与以下协议进行授权,*转载 - 非商用 - 非衍生 - 连结署名 | Creative Commons BY-NC-ND 3.0,转载请注明作者及来由.

1. 观点简介

差此外系统在存储数据时是分大端(bit-endian)小端(little-endian)存储的,好比,Inter x86、ARM核给与的是小端模式,Power PC、MIPS UNIX和HP-PA UNIX给与大端模式

小端模式用文字描述是,低地点上存放低字节,高地点上存放高字节。

假如有一个32位的数据 0x11223344,则在小端模式上的机器上存储为如下的形式:

那么有朋友大概会使用类似下面这样的循环方法 public static string ReverseByCharBuff

【1】0x11223344这个数中 0x11 是高字节(MSB),0x44是地字节(LSB)

【2】讨论巨细真个时候最小单位是字节

【3】内存的画法中给与的是向上增长的

【3】可以将数据比作标的目的盘,顺时钟旋转得到的在内存中的构造是小端存储

至于大端模式用文字描述是,低地点上存放高字节,高地点上存放低字节。

2. 如何判断

判断的要领有很多种,,下面将简单的列举几种:

第一种要领:

[cpp]  

 

/* 

 * 1: little-endian 

 * 0: big-endian 

 */  

int checkEndian()  

{  

    int a = 1;  

    char *p = (char *)&a;  

  

    return (*p == 1);  

}  

【1】如果是大端,*p的功效是0

第二种要领:

[cpp]  

 

/* 

 * 1: little-endian 

 * 0: big-endian 

 */  

int checkEndian()  

{  

    union w  

    {  

        int a;  

        char b;  

    } c;  

    c.a = 1;  

    return (c.b == 1);  

}  

函数中打印要领:

[cpp]  

 

printf("%s\n", checkEndian() ? "little-endian" : "big-endian");  

3. 大端和小真个转换

[cpp]  

 

int big_litle_endian(int x)    

{    

    int tmp;    

    tmp = (((x)&0xff)<<24) + (((x>>8)&0xff)<<16) + (((x>>16)&0xff)<<8) + (((x>>24)&0xff));    

    return tmp;    

}  

4. 其他

1. 在通信的场合经常会遇到大端和小真个转换的问题,好比tcp/ip 中,tcp/ip 中规定了本身传输的时候给与大端模式,固然相应的它也供给了很多函数来做撑持。

如果主机是小真个模式,在跟网络进行交互的时候经常要用到如下的函数

htons —— 把unsigned short类型从 主机序 转成 网络字节序

ntohs —— 把unsigned short类型从 网络字节序 转成 主机序

htonl —— 把unsigned long类型从 主机序 转成 网络字节序

ntohl —— 把unsigned long类型从 网络字节序 转成 主机序

需要包罗头文件

[cpp]  

 

#if defined(_LINUX) || defined(_DARWIN)  

#include <netinet/in.h>  

#endif  

  

#ifdef WIN32  

#include <WINSOCK2.H>  

#endif  

当一个系统要发送的数据是 0x12345678,以大端模式发送,则会先发送0x12.

2. 如安在64位ubuntu下同下编译32位的措施?

需要先安置32位的库:sudo apt-get install libc6-dev-i386

然后在编译的时候加上-m32选项。

C、C#实现反转总结。原文地点:https://blog.csdn.net/chenfujun818/article/details/78654956