C语言访问数据对象在内存中真实位模式的一个方法

2023-05-19 16:33:58 来源:博客园


(相关资料图)

在判定机器采用大端还是小端存储时,可以按字节输出某数据对象的机器表示的位模式。机器表示的位模式即某数据对象在内存中的二进制串。下面是一个访问数据对象位模式的方法:

//传入一个数据对象,从低地址到高地址按字节输出这个对象的每字节的十六进制表示void printByte(unsigned char* a,int n){    for( int i=0; i

上面的printByte函数的功能是:以参数*a传入一个数据对象的地址,以及你想打印的以这个地址为起始地址的连续的字节数量n,printByte打印出这连续的n个字节内存的位模式的十六进制表示。我们使用了一个unsigned char* 类型的指针变量,它以一字节大小解读所指向的数据,并以"%x"格式输出这个一字节大小的数据。

我们定义一个int变量并打印它的位模式:

int x = 128;printByte((unsigned char*)&x,sizeof(int))

可以看到输出为:

上面的输出也表示,这里实验的机器使用小端存储,即数据对象的低位部分存储在低地址部分。

在printByte函数中,需要注意:char* 型的指针指向的同样是一字节大小的数据,但此处一定要用unsigned char* 类型,而不能用char* 类型。因为"%x"是以十六进制形式输出int型的变量,所以,如果printByte的参数设置为char* 类型,在使用%x输出时,会将char类型隐式转换为int类型。此时,在上面的例子中,x值为128,其低8位的位模式为:1000 0000,即0x80,对于char型变量,其真值为-128。转换成int型变量后,位模式为:1111 1111 1111 1111 1111 1111 1000 0000 (补码编码),即0xffffff80:

void printByte(char* a,int n){    for( int i=0; i

输出结果为:

所以,在这个方法打印内存的位模式时,参数指针一定是unsigned char* 类型,而不能是char*类型。

标签

郴州安仁文旅项目集中开工 总投资1000万元

3月16日,安仁县举行文旅项目集中开工活动,县委书记王洪灿在开工仪式上宣布:湘南起义旧址群——朱毛井...

2022-03-20 15:40:46

2022年郴州计划重点推进文旅项目101个 总投资354亿元

3月16日,我市举行全市文旅项目和城市大提质大融城项目集中开工仪式,市委书记吴巨培宣布项目开工。郴州...

2022-03-20 15:39:41

宿州泗县深入推进文旅融合发展 擦亮城市品牌

近年来,泗县以争创安徽省文化旅游名县为目标,深入推进文旅融合发展,努力擦亮水韵泗州 运河名城城市...

2022-03-20 15:38:59

汽车零部件产业“领头羊” 锦州力争一季度“开门红”

3月16日,记者从锦州汽车零部件产业的领头羊——锦州万得集团获悉,今年前两个月,企业订单充足,正铆足...

2022-03-20 15:37:41

油价或有望冲击“九元”大关 宁波新能源汽车市场如何

新一轮国内成品油调价窗口于3月17日24时开启,油价或有望冲击九元大关。前一天晚上11点,鄞州区不少加油...

2022-03-20 15:34:38

从水塘到“云”端 全国最大高邮鸭养殖基地实现智慧养殖

随着新一代数字技术的蓬勃发展,以新兴技术推动现代化新农村建设正成为助力乡村振兴的重要手段。1个人能...

2022-03-20 15:33:17

淡季不忘引流 京郊民宿市场有望迎来回暖

旅游淡季中的京郊民宿有望成为市场中最先复苏的板块。3月17日,北京商报记者调查发现,虽然正值旅游淡季...

2022-03-20 15:32:01

镇江乡村一二三产业融合发展 闯出“镇江之路”

从烹饪江鲜河豚的个体小饭店到规模化的江岛乡村旅游产业集群,从白兔草莓丁庄葡萄的单个农户种植到茅山...

2022-03-20 15:31:11

总投资30亿元 盐城东台8个重大产业项目相继开工

总投资30亿元的精密电子元器件项目、同益电子项目,总投资10亿元的金利美精密组件项目、天永智能设备项...

2022-03-20 15:30:13

去年南京规上信息软件业企业实现营收7577.28亿元 同比增长10.3%

市统计局最新统计数据显示,2021年,我市规模以上信息软件业企业共1662家,较上年同期增加321家,实现营...

2022-03-20 15:28:57
x 广告
x 广告

Copyright  2015-2022 时代粮油网版权所有  备案号:   联系邮箱: 514 676 113@qq.com