打印数据的字节(十六进制)表示-c语言代码

时间:2022-04-10 15:39:07

  先取数据地址,转换成单字节长度的类型(unsigned char)的指针,然后按照十六进制逐字节打印即可,格式为“%.2x”。

sizeof()函数获取数据的字节数。

 /* $begin show-bytes */
#include <stdio.h>
/* $end show-bytes */
#include <stdlib.h>
#include <string.h>
/* $begin show-bytes */ typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start, int len) {
int i;
for (i = ; i < len; i++)
printf(" %.2x", start[i]); //line:data:show_bytes_printf
printf("\n");
} void show_int(int x) {
show_bytes((byte_pointer) &x, sizeof(int)); //line:data:show_bytes_amp1
} void show_float(float x) {
show_bytes((byte_pointer) &x, sizeof(float)); //line:data:show_bytes_amp2
} void show_pointer(void *x) {
show_bytes((byte_pointer) &x, sizeof(void *)); //line:data:show_bytes_amp3
}
/* $end show-bytes */

例子1

 /* $begin test-show-bytes */
void test_show_bytes(int val) {
int ival = val;
float fval = (float) ival;
int *pval = &ival;
show_int(ival);
show_float(fval);
show_pointer(pval);
}
/* $end test-show-bytes */

输入 12345,其十六进制表示为:0x 00 00 30 90,在64位windows cygwin64环境下,运行结果如下:

$ ./a.exe
calling test_show_bytes

e4
ac cb ff ff

从结果中可以看到,在此环境下,int和float类型占用4字节,指针占用8字节,并且此机器的字节顺序为从数据低位到高位,即小端法机器。

例子2

 void string_ueg() {
/* $begin show-ustring */
const char *s = "ABCDEF";
show_bytes((byte_pointer) s, strlen(s) + 1);
/* $end show-ustring */
} void string_leg() {
/* $begin show-lstring */
const char *s = "abcdef";
show_bytes((byte_pointer) s, strlen(s) + 1);
/* $end show-lstring */
}

结果:

Calling string_ueg
00
Calling string_leg

  C语言中,字符串编码为一个以null(值为0)字符结尾的字符数组,代码中我在字符长度上加了1,以打印出这个尾巴;

另外,每个字符的编码这里是ASCII编码。

打印数据的字节(十六进制)表示-c语言代码

打印数据的字节(十六进制)表示-c语言代码

注: ascii字符码表在linux环境下可以用命令 man ascii调出。

代码来源: CSAPP附带代码文件show-bytes.c

打印数据的字节(十六进制)表示-c语言代码的更多相关文章

  1. 大数据技术之&lowbar;16&lowbar;Scala学习&lowbar;13&lowbar;Scala语言的数据结构和算法&lowbar;Scala学习之旅收官之作

    第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...

  2. linux内核打印数据到串口控制台&comma;printk数据不打印问题

    linux内核打印数据到串口控制台问题 原文来源:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.查看当前控制台的打印级别 cat /proc/sys/kern ...

  3. Java String类型数据的字节长度

    问题描述: 向Oracle数据库中一varchar2(64)类型字段中插入一条String类型数据,程序使用String.length()来进行数据的长度校验,如果数据是纯英文,没有问题,但是如果数据 ...

  4. 浅谈c语言代码段 数据段 bss段

    代码段.数据段.bss段 (1)编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分. (2)代码段:代码段就是程序中的可执行部分,直观理解 ...

  5. Qt编写数据导出到Excel及Pdf和打印数据

    一.前言 用Qt开发已经九年了,期间用Qt做过不少的项目,在各种项目中有个功能很常用,尤其是涉及到数据记录存储的项目,那就是需要对查询的数据进行导出到Excel,或者导出到Pdf文件,或者直接打印查询 ...

  6. if循环后打印数据竖行输出和横排输出

    代码A如下: def func(*kargs):     return kargs, l = func(5,3,4,5,6) for i in l:          print (i) 打印结果: ...

  7. 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码

    浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...

  8. 如何提高单片机C语言代码效率

    代码效率包括两个方面内容:代码的大小和代码执行速度.如果代码精简和执行速度快,我们就说这个代码效率高.一般情况下,代码精简了速度也相应提上来了.单片机的ROM和RAM的空间都很有限,当您编程时遇到单片 ...

  9. 编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)

    接着上一遍文章<<编程精粹--编写高质量C语言代码(2):自己设计并使用断言(一)>>,继续学习怎样自己设计并使用断言,来更加easy,更加不费力地自己主动寻找出程序中的错误. ...

随机推荐

  1. Effective C&plus;&plus; -----条款28:避免返回handles指向对象内部成分

    避免返回handles(包括reference.指针.迭代器)指向对象内部.遵守这个条款可增加封装性,帮助const成员函数的行为像个const,并将发生“虚吊号码牌”(dangling handle ...

  2. C&num; ClickOnce deployment for Windows Services ClickOnce 部署windows service

    A simple solution that I use is to merely stop the service and x-copy the files from my bin folder i ...

  3. AVR文章7课时:动态数字化控制

    下面是动态数码管的电路图. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva290ZWlfODhfbHVsdWNfNjY=/font/5a6L5L2T/fo ...

  4. CodeForces 1B-字符串,进制转换与数学

    一个萌新的成长之路 Background 同学们都回家了,只有我和wjh还有邢神在机房敲代码,吃random口味的方便面-- Description Translated by @PC_DOS fro ...

  5. JavaEE介绍

    相关术语 为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担.为了程 ...

  6. eclipse Tomcat 容器已经启动 但右下角 progress 一直显示100&percnt;

    今天在家里 遇到一个问题 先上图 我的默认超时时间 eclipse 默认的 45s   果然 到了时间 依旧是 显示超时 解决方法其实   很简单   我看到网上有人说是tomcat 或者 eclip ...

  7. JavaScript小实例:拖拽应用(二)

    经常在网站别人的网站的注册页中看到一个拖拽验证的效果,就是它的验证码刚开始不出来,而是有一个拖拽的条,你必须将这个拖拽条拖到底,验证码才出来,说了感觉跟没说一样,你还是不理解,好吧,我给个图你看看: ...

  8. 去除图像中的alpha通道或透明度

    自从appstore提交app改变后,虽然提交的流程还是和原来一样,但是相比以前还是有很大的改动,本来就不太喜欢 English,改版之后很多东西都变了,开发一个app就已经够他妈的蛋疼啦,上传一个a ...

  9. centos7 hbase 搭建笔记

    1.require:java环境,本地可用的hadoop 2.拷贝hbase文件(hive-1.2.6) 3.设置环境变量 export HBASE_HOME=/data/spark/bin/hbas ...

  10. 解决ImageCropperComponent发布报错

    ng serve可以正常运行,npm run build 就会报错: ERROR in : Type ImageCropperComponent in -/node_modules/ng2-img-c ...