C语言 —— 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )

此文章参考《深入理解计算机系统》P31。

先看如下代码:  12345的十六进制表示为:0x00003039

 1 #include <stdio.h>
 2
 3 int main()
 4 {
 5     int a = 12345;
 6     char *q = (char *)(&a);
 7     for(int i = 0; i < sizeof(a); ++i)
 8         printf("%.2x ", q[i]);
 9     return 0;
10 }

输出为:

a的地址是int*类型,其对象是int型的4字节的12345,当其强制转换成unsigned char*类型的q时,由于char是1个字节,所以其对象会被一个字节一个字节的拆分,由于内存中是小端存储( 低地址存低位,高地址存高位),所以q[0]是4字节的12345在内存中的第一个字节,依次类推(12345所占的4个字节被强制拆成了4个单字节的存储),所以最后输出为 39 30 00 00 。

原文地址:https://www.cnblogs.com/FengZeng666/p/9588449.html

时间: 2024-10-11 17:06:22

C语言 —— 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )的相关文章

C++中将对象this转换成unsigned char指针

示例程序 // ---CodeBlob.h--- #ifndef CODEBLOB_H_ #define CODEBLOB_H_ class CodeBlob { private: const char* _name; int _size; public: CodeBlob(); void printName(); void printSize(); void setSize(int size); virtual ~CodeBlob(); }; #endif /* CODEBLOB_H_ */

php 对象强制转换成数组

$result=(array)$receive[0]; //对象强制转换成数组 foreach ($result as $key => $value) { $newresult[$key]=array((array)$value); } var_dump($newresult); exit();

json_encode($b, JSON_FORCE_OBJECT) 可以强制转换成对象

最近在为移动端的项目提供接口,数据格式都为json,不过在过程中遇到一个小问题,代码如下:情况一:$tmp = array('a','b','c');echo json_encode($tmp);输出结果:['a','b','c'] 情况二:$tmp = array('a'=>'a','b'=>'b','c'=>'c');echo json_encode($tmp);输出结果:{'a':'a','b':'b','c':'c'} 问题出来了:在二中,如果$tmp 可能为空的情况下,json

【C语言】编写函数实现库函数atoi,把字符串转换成整形

//编写函数实现库函数atoi,把字符串转换成整形 #include <stdio.h> #include <string.h> int my_atoi(const char *src) { int flag=1; int sum=0; while (*src) { if (*src == ' ') src++; else if (*src == '+') { src++; flag = 1; } else if(*src == '-') { src++; flag = -1; }

C语言打印16进制出现0xffffff现象的问题剖析!

今天在博问里面看到一个朋友的问题,大致是在网络程序中,打印出来的16进制数,莫名的出现ffffff.例如,某个byte真是值为0xc9,打印出来确是0xffffffc9.原博问连接如下:http://q.cnblogs.com/q/71073/ 其实类似的问题不是只在网络程序中才会出现的,看示例代码: 1 #include <stdio.h> 2 int main() 3 { 4 char c = 0xc9; 5 printf("A:c = %2x\n",(unsigned

深入理解C语言11 基于对象(Object based)编程

在使用对象编程之前先要了解什么是对象. 对象是指对数据和操作的抽象封装. 优点: 高内聚, 使用方便 缺点: 相关的操作函数是有状态的(也就是函数编程里常说的副作用, 操作系统开发里的不可重入函数), 不同时间点执行该函数,有可能会返回不同的结果), 不方便并行处理 C语言要实现一个对象,关键是解决数据和操作的封装. 1> 数据的封装主要是通过结构体来实现, 操作的封装则是通过函数指针来实现. 2> 数据隐藏, 主要是通过万能的void* 指针来实现. 对象的通用操作主要有以下3个 1>

C语言类型强制转换

C语言类型强制转换 强制类型转换是通过类型转换运算来实现的.其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型. 目录 1基本介绍 2注意事项 1基本介绍编辑 强制类型转换是通过类型转换运算来实现的.其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型.自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换.例如: (float) a 把a转换为实型,(int)(x+y)

json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值

主要内容: 一.json相关概念 二.json字符串转换成json对象 (字符串-->JSON对象) 三.json对象转换成字符串(json对象-->字符串) 四.将值转换成字符串(值-->字符串) 五.字符串转成值(字符串-->值) 同步的交流学习社区:http://www.mwcxs.top/page/425.html 一.json相关概念 json,全称为javascript object notation,是一种轻量级的数据交互格式.采用完全独立于语言的文本格式,是一种理想

JAVA笔记12__字节、字符缓冲流/打印流/对象流/

/** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差. * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来. * * BufferedInputStream:字节缓冲流(有一个内部缓冲区数组,用于缓冲数据) */ public class Main { public static void main(String[] args) { input(); output(); } /** * 使用字节缓冲流进行读取操作