`
vyloy
  • 浏览: 80692 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

判断系统的字节顺序

    博客分类:
  • C++
阅读更多
Why Worry About Byte Order

In general, the underlying byte order of the processor is completely transparent to the programmer. However, there can be a problem, for example, when data is exchanged with another system, since the other system may interpret multi-byte values differently.

For example, since it is not possible to predict the type of system at either end of the network, network protocols must define the byte order that is used for multi-byte values in their headers. This is called the network byte order, and for TCP/IP, it is big endian. Thus, the sending system converts the data from it local byte order to the network byte order. Then, the receiving system converts the data from network byte order to its local byte order. In practice, if either system uses the same byte order as the network byte order, the conversion operation is optimized out and no conversion takes place.

Another example is the USB protocol, which defines that multi-byte values will use the little endian byte order.

union{
	int i;
	char c[sizeof(int)];
} endian;

endian.i=1;
if(endian.c[0]==1){
	std::cout<<"little"<<std::endl;
}else{
	std::cout<<"big"<<std::endl;
}


作者:翁志艺
分享到:
评论

相关推荐

    无头BOM的UTF8文件判断

    标题中的“无头BOM的UTF8文件判断”是指在处理UTF-8编码的文本文件时,关注那些没有字节顺序标记(Byte Order Mark,简称BOM)的文件。BOM是一个可选的Unicode签名,通常出现在文件的开头,用于标识文件采用的字符...

    浅学字节序——字节序大小端,主机字节序,网络字节序的理解

    字节序,又称为字节顺序或字节排列方式,指的是在计算机内存中或网络传输过程中多字节数据的存储顺序。简单来说,它定义了多字节数据中各个字节如何按顺序排列。在实际编程工作中,尽管很多时候开发者可能不会直接...

    深入理解计算机系统(第二版)-家庭作业答案

    在计算机系统中,endianness 指的是字节顺序的问题。 Little-endian 和 Big-endian 是两种常见的字节顺序。 Little-endian 是指低字节存储在内存的低地址处,而 Big-endian 是指高字节存储在内存的低地址处。函数 `...

    深入理解计算机系统答案

    通过以上分析,我们不仅了解了《深入理解计算机系统》一书的教学目标和结构,也学习了几个具体的编程练习及其解决方案,这些练习涵盖了数据表示、位操作和系统字节顺序检测等关键主题,对于深入理解计算机系统的工作...

    5_网络字节序_werevj4_

    这个概念源于网络上不同计算机系统之间数据交换的需求,因为不同的硬件平台可能使用不同的字节顺序来存储多字节数值。大端字节序是指数值的最高有效字节存储在内存的最低地址,而最低有效字节存储在最高的地址。 ...

    可变字节码

    4. **解码过程**:在解压时,解码器会按字节顺序读取数据,检测每个字节的最高位(或者特定组合的位)来判断当前字节是否是数值的一部分。如果是,它会将这个字节和其他字节组合起来形成一个完整的数值;如果不是,...

    判断文本文件是否为UTF-8编码

    1. **检查BOM(Byte Order Mark)**:UTF-8允许在文件开头放置一个可选的字节顺序标记(BOM),其字节序为EF BB BF。如果文件以这三个字节开头,那么可以初步判断为UTF-8编码。但没有BOM的UTF-8文件也是存在的,所以...

    C# Byte数组转Int32 Short Float(浮点数)

    `BitConverter.IsLittleEndian`属性可以帮助判断当前系统的字节顺序。如果需要在不同字节顺序的系统间交换数据,可能需要调整字节顺序。 **自定义转换** 虽然`BitConverter`类提供了方便的转换方法,但在某些情况下...

    ComputerSystems深入理解计算机系统.pdf

    问题2.40关注的是字节顺序,即大端法(MSB优先)和小端法(LSB优先)的区别,通过编写函数来判断系统采用的是哪种字节顺序。问题2.45则涉及到了位移运算的移植性问题,因为C语言标准并未明确规定32位数据进行32位...

    四级嵌入式系统真题库(难题有解释)

    8. UNIX的fork()系统调用:成功创建子进程后,会根据pid判断执行不同的代码段,因此程序会输出两行"Hello World",对应C选项。 9. pthread线程操作:C选项pthread_join用于等待指定线程结束。 10. 不会引起进程...

    浮点数、Double与字节数组互转,C/C++函数

    可以通过检查系统字节序(如通过`__BYTE_ORDER__`宏)来实现代码的条件编译。 在提供的`TestFloatDouble`项目中,你可以找到具体的C/C++实现,这些函数通常会包括以下功能: - `float_to_bytes`: 浮点数转字节数组...

    判断字符编码格式代码

    BOM是一种特殊的字符序列,通常出现在文件的开头,用来标识文件的编码格式和字节顺序。代码首先检查是否存在BOM标记: - **UTF-8的BOM**:0xEF, 0xBB, 0xBF - **Big Endian Unicode (UTF-16BE)**:0xFE, 0xFF - **...

    C/C++ 大小端判断

    下面我们将详细探讨如何在C/C++中判断系统的字节序。 1. **字节序判断的基本方法**: - 使用预处理器宏`__BYTE_ORDER__`、`__BIG_ENDIAN__`、`__LITTLE_ENDIAN__`,这是GNU GCC提供的扩展。例如: ```c++ #if __...

    计算机系统基础考试试卷B卷(深入理解操作系统)

    判断题部分涉及的数据存储模式、浮点数运算、ELF文件头、栈操作、符号重定位、链接过程、整数存储形式、整数减法计算和寄存器用途等知识点,需根据具体题目分析判断。 简答题部分,涉及到x86_64体系结构下的结构体...

    关于C 的思考

    该程序通过将一个整数值`1`赋给变量`x`,然后检查其最低地址处的字节是否为`1`来判断系统的字节顺序。如果结果为`1`,则说明该系统采用小端模式;反之,则采用大端模式。 ### 结论 C语言的强大之处不仅在于它能够...

    计算机操作系统第四版试题及答案.docx

    知识点:页式管理系统是操作系统中的一种存储管理方法,地址寄存器的低 9 位表示页内地址,页面大小可以是 1024 字节、512 字节、1024K、512K 等。 4. 串联文件适合于( )存取 直接、顺序、索引、随机 知识点:...

    使用Protothread简化嵌入式系统中的顺序流控制

    Protothread是一种专为资源有限系统设计的编程模型,它提供了一种轻量级的线程机制,用于简化嵌入式系统中的顺序流控制。这种机制尤其适合于嵌入式操作系统(OS)环境,因为它不依赖于硬件的复杂线程管理,也不需要...

    利用RMAN将数据库转换到不同平台上

    通过查询这个视图,我们可以判断源实例和目标实例是否需要进行字节顺序转换。RMAN的CONVERT命令有三种主要用法: 1. CONVERT TABLESPACE:在源系统中使用,将指定的表空间中的所有数据文件转换为目标平台的格式。这...

Global site tag (gtag.js) - Google Analytics