C访问数据对象在内存中的位模式

这篇具有很好参考价值的文章主要介绍了C访问数据对象在内存中的位模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

可以看到输出为:

C访问数据对象在内存中的位模式

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

在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<n; i++ ) {
        printf("%x ",a[i]);
    }
    printf("\n");
}

int main()
{
    int x = 128;
    printByte((char*)&x,sizeof(int));
    return 0;
}

输出结果为:

C访问数据对象在内存中的位模式

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

 

 博主会持续更新精心原创文章,在逻辑严瑾的同时,力求最通俗易懂地把知识写得清楚,写得明白。觉得博主写得还可以的小伙伴儿点点关注,点点赞啦~

 有不足的地方,也请各路大神批评指正,感谢大家的支持~文章来源地址https://www.toymoban.com/news/detail-451286.html

到了这里,关于C访问数据对象在内存中的位模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代理模式——对象的间接访问

    由于某些原因,客户端不想或不能直接访问某个对象,此时可以通过一个被称为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式。 代理模式是一种应用很广泛的结构型设计模式,而且变化很多。在代理模式中引入了一个新的代理对象,代理对象可以

    2024年02月14日
    浏览(76)
  • 篇十二:代理模式:控制对象访问

    篇十二: “代理模式:控制对象访问” 开始本篇文章之前先推荐一个好用的学习工具,AIRIght,借助于AI助手工具,学习事半功倍。欢迎访问:http://airight.fun/。 另外有2本不错的关于设计模式的资料,分享出来与大家学习参考。 链接:https://pan.baidu.com/s/1RmhQF_o1CdK8U7s5KeILog?pwd

    2024年02月13日
    浏览(38)
  • 访问者模式——操作复杂对象结构

    访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分。这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能,为这些不同类型的

    2024年02月13日
    浏览(31)
  • 【Java虚拟机学习2】HotSpot虚拟机下对象的创建及在Java堆中对象的内存分配、布局和对象的访问

    对象的生命周期主要分为创建、使用、销毁这三大阶段。从它被创建的一刻开始,到它被垃圾收集器(Garbage Collector)回收的一刻结束 对象的创建 。包括:1、类的加载 2、内存的分配 3、初始化零值 4、设置对象头 5、执行init方法(具体操作步骤请看上述内容,其中步骤1的类

    2024年02月16日
    浏览(40)
  • java中的位运算和&、|、^运算

      我把平时遇到的位运算参考部分博客和自身应用进行了一点简单的总结,方便记忆与理解;如有错误欢迎各路大神评论指正~ 1、   (算数左移) 表示左移, 不分正负数,低位补0 2、   (算数右移) 表示右移, 如果该数为正,则高位补0; 如果该数为负,则高位补1。 3、

    2024年02月06日
    浏览(32)
  • JAVA设计模式6:代理模式,用于控制对目标对象的访问

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,阿里云社区专家博主,蓝桥云课讲师。 代理模式是一种常用的设计模式,它提供了一个代理对象,用于控制对目标对象的访问 。 在代理模式

    2024年02月07日
    浏览(43)
  • 通过读取字节内容分析对象在内存中的布局

    在《如何计算一个实例占用多少内存?》中我们知道一个值类型或者引用类型的实例在内存中占多少字节。如果我们知道这段连续的字节序列的初始地址,我们就能够将代表该实例的字节内容读取出来。在接下来的内容中,我们将利用一个简单的方法输出指定实例的字节序列

    2024年02月08日
    浏览(36)
  • 【JVM】Java堆 :深入理解内存中的对象世界

    人不走空                                                                            目录         🌈个人主页:人不走空       💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 ​编辑 什么是Java堆? 作用和特点 1. 存储对象实例 2. 垃圾收集 3. 对象

    2024年01月19日
    浏览(50)
  • JVM中判定对象是否回收的的方法

    引用计数法是一种垃圾回收(Garbage Collection)算法,用于自动管理内存中的对象。在引用计数法中,每个对象都有一个关联的引用计数器,用于记录对该对象的引用数量。 当一个新的引用指向对象时,该对象的引用计数器加1;当一个引用不再指向对象时,对象的引用计数器

    2024年02月12日
    浏览(55)
  • JVM 判定对象是否死亡的两种方式

    引用计数法:(脑门刻字法)和 可达性分析 引用计数算法 引用计数器的算法是这样的:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 实现简单,效率很高,

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包