C/C++中字节序、类型转化的深入理解
如果将字节序、类型转化单独一个拿出来说时,大家可能都觉得很简单,但是理解的不深入。如果将其结合起来探讨,可能我们就会理解的很透彻。
关于字节序和类型转化的基础,大家如果不太理解,可以参考以下博客:
https://my.oschina.net/u/1783725/blog/647973 大小字节序
https://my.oschina.net/u/1783725/blog/700970 类型转化
在进入正题之前,在啰嗦一句:
系统位数不同对应数据类型的字节数大小也不同
详细介绍两者之间的联系
字节序: 操作的内存,就是将我们看到的数据存放在内存中的规则。
大字节序:大端有效 ,高位数据先放入低地址内存 , 低位数据放入高地址内存;小字节序:小端有效,低位数据先放入低地址内存 , 高位数据再放入高地址内存
操作内存(如:memcpy)就需要考虑字节序
类型转化: 操作的是读出的数据,就是将从内存中读取的数据,根据类型字节的大小进行转化。
位数多的转化为位数小的(会截断高位的数据,留下地位的数据),位数小的转化为位数多的(将高位的数据补为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; }

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

php与c#的区别有:1、语言类型系统不同,PHP属于动态,而C#为静态类型;2、使用的平台不同,PHP可以实现跨平台,而C#为Windows专属;3、编程范式不同,PHP支持面向对象、过程化和函数式编程,C#更倾向于面向对象编程;4、执行速度不同,PHP速度更快,C#相对较慢;5、应用场景不同,PHP应用于Web开发、服务器等,C#用于Windows桌面和Web应用程序。

Inthistutorial,wewillbediscussingaprogramtocreateaC/C++codeformattingtoolwiththehelpofclangtools.SETUPsudoaptinstallpythonsudoaptinstallclang-format-3.5然后我们将在当前用户具有读写权限的位置创建一个Python文件。示例importoscpp_extensions=(".cxx",".cpp&

sizeof()获取的结构类型元素的大小并不总是等于每个单独成员的大小。有时编译器会添加一些填充以避免对齐问题。所以尺寸可能会改变。当结构成员后面跟着一个尺寸较大的成员或位于结构末尾时,将添加填充。不同的编译器有不同类型的对齐约束。在C标准中,总对齐结构取决于实现。情况1在这种情况下,双精度z为8字节长,大于x(4字节))。因此又添加了4个字节的填充。此外,短类型数据y在内存中具有2字节空间,因此添加了额外的6字节作为填充。示例代码#include<stdio.h>structmyS

VScode中怎么开发置C/C++?怎么配置C/C++环境?下面本篇文章给大家分享一下VScode配置C/C++运行环境教程(保姆级教学),希望对大家有所帮助!

这里我们来看看什么是C或C++中的前自增和后自增。前自增和后自增都是自增运算符。但它们几乎没有什么区别。前自增运算符首先递增一个变量的值,然后将其分配给其他变量,但在后自增运算符的情况下,它首先分配给一个变量变量,然后增加值。示例#include<iostream>usingnamespacestd;main(){ intx,y,z; x=10; y=10;&nb

函数strcpy()是一个标准库函数。它用于将一个字符串复制到另一个字符串。在C语言中,它在“string.h”头文件中声明,而在C++语言中,它在cstring头文件中声明。它返回指向目的地的指针。这是C语言中strcpy()的语法,char*strcpy(char*dest,constchar*src);strcpy()的一些关键点。它将整个字符串复制到目标字符串中。它替换整个字符串而不是追加它。它不会改变源字符串。下面是C语言中strcpy()的示例:示例 在线演示#in

这里我们将了解如何计算任意数字的阶乘结果中尾随0的数量。因此,如果n=5,则5!=120。只有一个尾随0。对于20!,它将是4个零作为20!=2432902008176640000。最简单的方法就是计算阶乘并计算0。但对于较大的n值,这种方法会失败。所以我们将采用另一种方法。如果质因数是2和5,那么尾随零就会出现。如果我们计算2和5,我们就可以得到结果。为此,我们将遵循此规则。尾随0=阶乘(n)素因数中5的计数算法countTrailingZeros(n)begin &

在本节中,我们将了解如何在C或C++代码中同时执行if和else部分。这个解决方案有点棘手。当if和else相继执行时,就像执行不存在if-else的语句一样。但在这里我们将看看它们是否存在如何依次执行它们。示例代码#include<iostream>usingnamespacestd;intmain(){ intx=10; if(x>5) { &
