编解码:十六进制编解码

编解码:十六进制编解码编解码 十六进制编解码信息有多种表现形式 二进制 十进制 十六进制 字符串 在计算机中 信息是以二进制的形式来表现

大家好,欢迎来到IT知识分享网。

编解码:十六进制编解码

信息有多种表现形式:二进制、十进制、十六进制、字符串…

在计算机中,信息是以二进制的形式来表现。

可以人为定义:0就是假,1就是真,等等。

所谓编解码,是将一种数据以另一种形式来表现,若正向变换称为编码,则其逆向过程则为解码。

计算机中,数据的本质是一串二进制0和1的字符串。

例如,二进制字符串0a代表十进制字符串10,十进制字符串255以二进制的形式表现则为0xff。

我们定义:

由二进制编码为十六进制的过程,称为十六进制码;
由十六进制编码为二进制的过程,称为十六进制码;

规则如下:

二进制数据:0x0a,在计算机中通常占1字节存储空间,即8bit,我们将前4bit取出,以十六进制表示,为字符串第一个字符:’0’;我们将后4bit取出,以十六进制表示,为字符串第二个字符:’a’,即,0000–>‘0’,1010–>’a’,最终结果为字符串”0a”。

若存在多个字节数据,则从左到右,依次编码。

例如:

0xab 0xcd 0xef 编码为十六进制:”abcdef”。

可见,编解码的本质是将数据以另一种不同形式表示的过程,数据信息本身并不发生改变。

如何将上面的解释“以程序代码的形式”进行“编码”?(^_^)

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> /*-------------------------------------------------------------- * 函数名称:bin2hex * 功能描述:对Binary数据以十六进制形式进行编码 * 参数说明:bin:待编码数据;blen:待编码数据长度 * 返 回 值: * 备 注:一字节数据0xab编码为字符串"ab" * */ void bin2hex(const unsigned char *bin, size_t blen) { static char bin2char[] = "0abcdef"; char *hex = malloc(blen*2+1); // The Last '1' For C 'NULL' memset(hex, 0, blen*2+1); for (size_t i = 0; i < blen; i++) { hex[i*2] = bin2char[bin[i]>>4]; hex[i*2+1] = bin2char[bin[i]&0x0f]; } printf("%s\n", hex); free(hex); } /*-------------------------------------------------------------- * 函数名称:hex2num * 功能描述:十六进制字符转换为十进制数字 * 参数说明:ch:待转换十六进制字符 * 返 回 值:转换后的十进制数字 * 备 注:忽略错误 * */ unsigned int hex2num(char ch) { if (ch >= '0' && ch <= '9') return ch - '0'; else if (ch >= 'a' && ch <= 'z') return ch - 'a'; else if (ch >= 'A' && ch <= 'Z') return ch - 'A'; else return 0; // error } /*-------------------------------------------------------------- * 函数名称:hex2bin * 功能描述:十六进制形式解码为Binary数据 * 参数说明:hex:待解码十六进制数据 * 返 回 值:Binary数据 * 备 注:可由Hex数据推导出Bin数据长度(Hex-Len = 2 * Bin-Len) * */ unsigned char *hex2bin(const char *hex) { size_t blen = strlen(hex) / 2; unsigned char *bin = malloc(blen); for (size_t i = 0; i < blen; i++) bin[i] = hex2num(hex[i*2])*16 + hex2num(hex[i*2+1]); return bin; } int main() { const char *hex = "0abcdef"; unsigned char *bin = hex2bin(hex); bin2hex(bin, 8); free(bin); return 0; }

编译 && 执行:

[jiang@localhost jiang]$ gcc -o HexWithBin HexWithBin.c -std=c99 [jiang@localhost jiang]$ ./HexWithBin 0

请注意:

编解码的结果仅仅是数据表现形式不同,但结果所蕴含的信息数据是完全相同的。 编解码不等于加解密,更不等于摘要,他们三者是完全独立的概念,之间相互无任何关联性。 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112500.html

(0)
上一篇 2026-01-17 21:45
下一篇 2026-01-17 22:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信