【习题】习题 2 - 编写程序求当前机器的字节序

        欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。


目录

1、缘起

2、字节序影响

3、示例代码

4、总结


1、缘起

        在计算机中,字节序(Byte Order)指定了多字节数据类型(如整数、浮点数)在内存中存储的顺序。它有两种常见的格式:大端序(Big-Endian)小端序(Little-Endian)

        字节序的作用 是确保多字节数据的正确解释和传输。当一个多字节的数据被存储到内存中或在网络上传输时,字节序决定了字节的排列顺序。


 

2、字节序影响

具体来说,字节序影响以下方面:

①  内存中的数据存储

        在大端序中,数据的高字节存储在低地址处,低字节存储在高地址处;

【习题】习题 2 - 编写程序求当前机器的字节序_第1张图片

        而在小端序中,数据的低字节存储在低地址处,高字节存储在高地址处。选择合适的字节序可以确保数据在内存中按正确的顺序存储,以便程序正确解释和访问这些数据。

【习题】习题 2 - 编写程序求当前机器的字节序_第2张图片

②  网络传输

        在网络中传输数据时,通常需要将数据转换为网络字节序(通常采用大端序)。这是因为不同计算机可能使用不同的字节序,为了确保数据在不同系统之间正确解释,发送方需要将数据按照网络字节序进行发送,接收方再将其转换为本地字节序进行解释。

③  文件格式

        某些文件格式(如图像、音频、视频)要求使用特定的字节序进行编码。如果读取或写入这些文件时使用错误的字节序,可能会导致数据损坏或解析错误。

        总之,字节序在计算机中的作用是确保多字节数据在内存中存储、在网络传输和文件格式中解释的一致性。正确处理字节序可以确保数据的正确性和可移植性。


 

3、示例代码

算法思想:就取一个字节的地址,进行比较

#include

int main()
{
	int ret = CheckSystem();
	
	if (1 == ret)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	
	return 0;
}	

int CheckSystem()
{
	int a = 1;

	return * (char*)&a;
}

关键代码解释: 

① int a = 1;
        定义了一个 4 个字节的空间,这个空间的名称为 a,a 中的值为 1,1 为十进制数;a 中的二进制值为 00000000 00000000 00000000 00000001,二进制值从左往右,数据位从高到底依次递减。

【习题】习题 2 - 编写程序求当前机器的字节序_第3张图片

② *(char*)&a
        因为 a 被定义为 4 个字节,所以用 char 强制类型转换,取 a 一个字节的地址( a 的首字节地址),查看其地址中存储的值,如果值为 1,则该机器数据存储模式为小端存储模式;如果值为 0,则该机器数据存储模式为大端存储模式。 


4、总结

        本期的分享总结就到这里了,如果有疑问的小伙伴儿,我们在评论区交流嗷~~~,笔者必回,我们下期再见啦 !

你可能感兴趣的:(习题,习题,字节序)