C语言重难点:大端小端(在一个64位的操作系统中定义如下结构体:)

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言重难点:大端小端(在一个64位的操作系统中定义如下结构体:)相关的知识,希望对你有一定的参考价值。

一:大端和小端

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中

在这里插入图片描述

二:经典问题

1:如何判断当前机器的字节序
在这里插入图片描述
2:下面的程序输出的是什么(64位操作系统)

#include <stdio.h>

struct task
{
	uint16_t id;//2个字节
	uint32_t value;//4个字节
	uint64_t timestamp;//8个字节

};


int main()
{
	struct task tas = {};
	uint64_t a = 0x00010001;
	memcpy(&tas, &a, sizeof(uint64_t));
	printf("%11u,%11u,%11u", tas.id, tas.value, tas.timestamp);

}

根据内存对齐的原则,id,value和timestamp所组成的结构体为16个字节在这里插入图片描述

接着对结构体进行初始化,全部为0
在这里插入图片描述

变量a的存储布局
在这里插入图片描述
memcpy函数用法如下
在这里插入图片描述
也就是从a的位置开始,向后复制16个字节
在这里插入图片描述
故结果为1 0 0

以上是关于C语言重难点:大端小端(在一个64位的操作系统中定义如下结构体:)的主要内容,如果未能解决你的问题,请参考以下文章

大端与小端之一理论

java内存,大端小端判断

大小端存储

为啥会有大小端模式之分呢?

用c语言写个函数测试处理器是大端还是小端程序怎么写?

字节序:大端和小端(Big endian and Little endian)(转自维基百科)