Linux kernel scriptes bin2c "\x"

/****************************************************************************
 *                    Linux kernel scriptes bin2c "\x"
 * 声明:
 *     早上在阅读Linux kernel scriptes中的源代码的时候发现bin2c的源代码,
 * 于是打算看一下,结果发现"\x"的写法,于是查了点资料,看了一下它的用法。
 *
 *                                    2015-12-29 深圳 南山平山村 曾剑锋
 ***************************************************************************/

一、参考资料:
    1. \x49\x51\x5a\x56\x54\ 这种是什么编码?
        http://zhidao.baidu.com/link?url=tDpw0M4dsxvnldOAzJg0HiS25vYl3ebTBwJOF0ULHxBGEF-0nYLiewaX29d870N5cro-yv2blYWgG2Kx4xFPXK
    2. \X在C语言里表示什么意思?
        http://zhidao.baidu.com/link?url=HC1lXt3Cv2yE1gQaLchbyhlaAwU9X9hVEQNz_dRqqvP4lTO1dTypMFnKT7rI8mmH9lUsSAjNPgo_fyzJYngcLa

二、Linux内核scripts/bin2c.c
    /*
     * Unloved program to convert a binary on stdin to a C include on stdout
     *
     * Jan 1999 Matt Mackall <[email protected]>
     *
     * This software may be used and distributed according to the terms
     * of the GNU General Public License, incorporated herein by reference.
     */

    #include <stdio.h>

    /**
     * 1. 程序将第二个参数作为数组的名字;
     * 2. 程序通过读取标输入数据,并将数据转换成十六进制输出到标准输出;
     * 3. 由于是通过标准入获取数据,那么常用的方式应该是采用管道进行数据传输;
     * 4. 目前没搞懂下面这条语句为什么要转成"\x":
     *     printf("\\x%02x",ch);
     */
    int main(int argc, char *argv[])
    {
        int ch, total=0;

        if (argc > 1)
            printf("const char %s[] %s=\n",
                argv[1], argc > 2 ? argv[2] : "");

        do {
            printf("\t\"");
            while ((ch = getchar()) != EOF)
            {
                total++;
                printf("\\x%02x",ch);
                if (total % 16 == 0)
                    break;
            }
            printf("\"\n");
        } while (ch != EOF);

        if (argc > 1)
            printf("\t;\n\nconst int %s_size = %d;\n", argv[1], total);

        return 0;
    }

三、"\x"数据测试代码:
    #include <stdio.h>

    int main (int argc, char **argv) {
        printf("%c, %s.\n", ‘\x30‘, "\x31\x32");
    }
时间: 2024-10-21 13:28:48

Linux kernel scriptes bin2c "\x"的相关文章

ARM32 Linux kernel virtual address space

http://thinkiii.blogspot.jp/2014/02/arm32-linux-kernel-virtual-address-space.html The 32-bit ARM CPU can address up to 2^32 = 4GB address*. It's not big enough in present days, since the size of available DRAM on computing devices is growing fast and

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

Linux Kernel 开发报告 25 周年版

Linux基金会发布 2016 年度 Linux 内核开发报告,这次恰逢 Linux 内核 25 周年(腾云科技ty300.com),所以相比往年又更多的回顾性内容,值得一读. Linux 内核开发报告 2016 版 一些有趣的信息: 自 3.18 内核以来,合并自Linux Kernel内核的新功能覆盖面更为广泛,且涉及安全性的新功能越来越多 4.0 系列的引入仅仅是由于 Linus (基础教程qkxue.net)觉得小版本号已经超越正常人手指和脚趾数量的总和了.每一个内核版本发布都是传统意义

linux kernel 字符设备详解

有关Linux kernel 字符设备分析: 参考:http://blog.jobbole.com/86531/ 一.linux kernel 将设备分为3大类,字符设备,块设备,网络设备. 字符设备是指只能一个字节一个字节读写的设备, 常见的外设基本上都是字符设备. 块设备:常见的存储设备,硬盘,SD卡都归为块设备,块设备是按一块一块读取的. 网络设备:linux 将对外通信的一个机制抽象成一个设备, 通过套接字对其进行相关的操作. 每一个字符设备或块设备都在/dev目录下对应一个设备文件.l

Linux Kernel 4.7 RC2已发布

Linux内核(英语:Linux kernel),是一种计算机操作系统内核,以C语言和汇编语言写成,符合POSIX标准,以GNU通用公共许可证发布.Linux内核最早是由芬兰黑客林纳斯·托瓦兹为尝试在自己的英特尔x86架构计算机上提供自由免费的类Unix系统而开发的. Linus Torvalds于6月5号(星期天)宣布了Linux Kernel 4.7的第二个候选发布版本(rc2),而rc1的发布则是在5月29号那天,预计Linux Kernel 4.7会在7月的第二或第三周迎来稳定版.Lin

使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录

Linux kernel  的官方 GIT地址是: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git 可以从这个地址拿到 kernel 的 代码仓库. 1. 拿代码仓库 [plain] view plaincopyprint? git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git 2. 查看状态: [pla

Linux Kernel 4.2.2 编译安装教程

安装linux的最新内核其实不难,搞linux就不要怕尝试. 我配置是AMD Athlon X2 64 4600+的处理器和DDR2 2GB的内存条,系统为Xubuntu 15.04. 现在我与大家分享一下经验,由于我写这个帖子的时候,4.2.2是最新的正式版内核,所以就以4.2.2为例了. 首先去官网下载4.2.2的内核包,官网地址:https://www.kernel.org/ linux-4.2.2.tar.gz官网下载地址:https://www.kernel.org/pub/linux

linux kernel with param

Linux kernel support pass param to kernel, this params can be assigned at load time by insmod or modprobe.  or later read from /etc/modprobe.conf file. There are two macro : module_param and module_param_array, To declare an param or array param ,use

虚拟机安装中标麒麟3.2时报unkown filesystem,you need to load the linux kernel first

工作需要,在虚拟机上安装中标麒麟3.2的64位版本. 虚拟机用的VMware Workstation 9.0,按照常识目标DVD光盘文件的类型选择Other Linux 2.6.x Kernel 64-bit(因为目前大部分都是2.6.18的内核以上,尤其是Suse Linux等,所以惯性使然),Power On后,出现版本选择窗口, 点击后,没有出现令人激动的安装引导界面,但出现了"Unkown Filesystem"."you need to load the linux