如果将字节序、类型转化单独一个拿出来说时,大家可能都觉得很简单,但是理解的不深入。如果将其结合起来探讨,可能我们就会理解的很透彻。
关于字节序和类型转化的基础,大家如果不太理解,可以参考以下博客:
https://my.oschina.net/u/1783725/blog/647973 大小字节序
https://my.oschina.net/u/1783725/blog/700970 类型转化
在进入正题之前,在啰嗦一句:
立即学习“C++免费学习笔记(深入)”;
系统位数不同对应数据类型的字节数大小也不同

详细介绍两者之间的联系
字节序: 操作的内存,就是将我们看到的数据存放在内存中的规则。
大字节序:大端有效 ,高位数据先放入低地址内存 , 低位数据放入高地址内存;小字节序:小端有效,低位数据先放入低地址内存 , 高位数据再放入高地址内存
操作内存(如:memcpy)就需要考虑字节序
简介PHP轻论坛是一个简单易用的PHP论坛程序,适合小型社区和个人网站使用。v3.0版本是完全重构的版本,解决了之前版本中的所有已知问题,特别是MySQL保留字冲突问题。主要特点• 简单易用:简洁的界面,易于安装和使用• 响应式设计:适配各种设备,包括手机和平板• 安全可靠:避免使用MySQL保留字,防止SQL注入• 功能完善:支持分类、主题、回复、用户管理等基本功能• 易于扩展:模块化设计,便于
21

类型转化: 操作的是读出的数据,就是将从内存中读取的数据,根据类型字节的大小进行转化。
位数多的转化为位数小的(会截断高位的数据,留下地位的数据),位数小的转化为位数多的(将高位的数据补为0)。

一个例子来读懂他们
1、赋值与字节序无关,操作内存(memcpy)就需要考虑字节序
1:将unsigned long long类型的0xABCDEF1234赋值给unsigned long类型的变量,与字节序无关
2:unsigned long long类型的0xABCDEF1234变量使用memcpy到short类型的变量,发现为0,与字节序有关
代码如下:
#include <stdio.h>int main(int argc, char *argv[])
{
unsigned long long ullVar = 0xABCD1234;
unsigned long ulVar1 = 0;
unsigned long ulVar2 = 0;
/*memcpy操作内存时,需要考虑系统的大小字节序,如果是大字节序的话,高位的数据保存在低地址上*/
memcpy(&ulVar1,&ullVar,sizeof(ulVar1)); /*赋值时,就是讲读出的数据按照要赋值的数据类型的大小进行转换*/
ulVar2 = ullVar; printf("ulVar1=%x ulVar2=%x \n",ulVar1,ulVar2);
//输出:ulVar1=0 ulVar2=abcd1234
return 0;
}
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号