ASCII、BCD转十六进制
ASCII转十六进制
转换规则
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统,ASCII码表主要用于显示现代英语和其他西欧语言。转换规则如下表:
十六进制代码 | MCS 字符或缩写 | DEC 多国字符名 |
ASCII 控制字符 1 | ||
00 | NUL | 空字符 |
01 | SOH | 标题起始 (Ctrl/A) |
02 | STX | 文本起始 (Ctrl/B) |
03 | ETX | 文本结束 (Ctrl/C) |
04 | EOT | 传输结束 (Ctrl/D) |
05 | ENQ | 询问 (Ctrl/E) |
06 | ACK | 认可 (Ctrl/F) |
07 | BEL | 铃 (Ctrl/G) |
08 | BS | 退格 (Ctrl/H) |
09 | HT | 水平制表栏 (Ctrl/I) |
0A | LF | 换行 (Ctrl/J) |
0B | VT | 垂直制表栏 (Ctrl/K) |
0C | FF | 换页 (Ctrl/L) |
0D | CR | 回车 (Ctrl/M) |
0E | SO | 移出 (Ctrl/N) |
0F | SI | 移入 (Ctrl/O) |
10 | DLE | 数据链接丢失 (Ctrl/P) |
11 | DC1 | 设备控制 1 (Ctrl/Q) |
12 | DC2 | 设备控制 2 (Ctrl/R) |
13 | DC3 | 设备控制 3 (Ctrl/S) |
14 | DC4 | 设备控制 4 (Ctrl/T) |
15 | NAK | 否定接受 (Ctrl/U) |
16 | SYN | 同步闲置符 (Ctrl/V) |
17 | ETB | 传输块结束 (Ctrl/W) |
18 | CAN | 取消 (Ctrl/X) |
19 | EM | 媒体结束 (Ctrl/Y) |
1A | SUB | 替换 (Ctrl/Z) |
1B | ESC | 换码符 |
1C | FS | 文件分隔符 |
1D | GS | 组分隔符 |
1E | RS | 记录分隔符 |
1F | US | 单位分隔符 |
ASCII 特殊和数字字符 | ||
20 | SP | 空格 |
21 | ! | 感叹号 |
22 | " | 引号 (双引号) |
23 | # | 数字符号 |
24 | $ | 美元符 |
25 | % | 百分号 |
26 | & | 和号 |
27 | " | 省略号 (单引号) |
28 | ( | 左圆括号 |
29 | ) | 右圆括号 |
2A | * | 星号 |
2B |
| 加号 |
2C | , | 逗号 |
2D | -- | 连字号或减号 |
2E | . | 句点或小数点 |
2F | / | 斜杠 |
30 | 0 | 零 |
31 | 1 | 1 |
32 | 2 | 2 |
33 | 3 | 3 |
34 | 4 | 4 |
35 | 5 | 5 |
36 | 6 | 6 |
37 | 7 | 7 |
38 | 8 | 8 |
39 | 9 | 9 |
3A | : | 冒号 |
3B | ; | 分号 |
3C | < | 小于 |
3D | = | 等于 |
3E | > | 大于 |
3F | ? | 问号 |
ASCII 字母字符 | ||
40 | @ | 商业 at 符号 |
41 | A | 大写字母 A |
42 | B | 大写字母 B |
43 | C | 大写字母 C |
44 | D | 大写字母 D |
45 | E | 大写字母 E |
46 | F | 大写字母 F |
47 | G | 大写字母 G |
48 | H | 大写字母 H |
49 | I | 大写字母 I |
4A | J | 大写字母 J |
4B | K | 大写字母 K |
4C | L | 大写字母 L |
4D | M | 大写字母 M |
4E | N | 大写字母 N |
4F | O | 大写字母 O |
50 | P | 大写字母 P |
51 | Q | 大写字母 Q |
52 | R | 大写字母 R |
53 | S | 大写字母 S |
54 | T | 大写字母 T |
55 | U | 大写字母 U |
56 | V | 大写字母 V |
57 | W | 大写字母 W |
58 | X | 大写字母 X |
59 | Y | 大写字母 Y |
5A | Z | 大写字母 Z |
5B | [ | 左中括号 |
5C | \ | 反斜杠 |
5D | ] | 右中括号 |
5E | ^ | 音调符号 |
5F | _ | 下划线 |
60 | ` | 重音符 |
61 | a | 小写字母 a |
62 | b | 小写字母 b |
63 | c | 小写字母 c |
64 | d | 小写字母 d |
65 | e | 小写字母 e |
66 | f | 小写字母 f |
67 | g | 小写字母 g |
68 | h | 小写字母 h |
69 | i | 小写字母 i |
6A | j | 小写字母 j |
6B | k | 小写字母 k |
6C | l | 小写字母 l |
6D | m | 小写字母 m |
6E | n | 小写字母 n |
6F | o | 小写字母 o |
70 | p | 小写字母 p |
71 | q | 小写字母 q |
72 | r | 小写字母 r |
73 | s | 小写字母 s |
74 | t | 小写字母 t |
75 | u | 小写字母 u |
76 | v | 小写字母 v |
77 | w | 小写字母 w |
78 | x | 小写字母 x |
79 | y | 小写字母 y |
7A | z | 小写字母 z |
7B | { | 左大括号 |
7C | | | 垂直线 |
7D | } | 右大括号 (ALTMODE) |
7E | ~ | 代字号 (ALTMODE) |
7F | DEL | 擦掉 (DELETE) |
控制字符 | ||
80 |
| [保留] |
81 |
| [保留] |
82 |
| [保留] |
83 |
| [保留] |
84 | IND | 索引 |
85 | NEL | 下一行 |
86 | SSA | 被选区域起始 |
87 | ESA | 被选区域结束 |
88 | HTS | 水平制表符集 |
89 | HTJ | 对齐的水平制表符集 |
8A | VTS | 垂直制表符集 |
8B | PLD | 部分行向下 |
8C | PLU | 部分行向上 |
8D | RI | 反向索引 |
8E | SS2 | 单移 2 |
8F | SS3 | 单移 3 |
90 | DCS | 设备控制字符串 |
91 | PU1 | 专用 1 |
92 | PU2 | 专用 2 |
93 | STS | 设置传输状态 |
94 | CCH | 取消字符 |
95 | MW | 消息等待 |
96 | SPA | 保护区起始 |
97 | EPA | 保护区结束 |
98 |
| [保留] |
99 |
| [保留] |
9A |
| [保留] |
9B | CSI | 控制序列引导符 |
9C | ST | 字符串终止符 |
9D | OSC | 操作系统命令 |
9E | PM | 秘密消息 |
9F | APC | 应用程序 |
其他字符 | ||
A0 |
| [保留] 2 |
A1 | ? | 反向感叹号 |
A2 | ? | 分币符 |
A3 | ? | 英磅符 |
A4 |
| [保留] 2 |
A5 | ? | 人民币符 |
A6 |
| [保留] 2 |
A7 | § | 章节符 |
A8 | ¤ | 通用货币符号 2 |
A9 | ? | 版权符号 |
AA | ? | 阴性顺序指示符 |
AB | ? | 左角引号 |
AC |
| [保留] 2 |
AD |
| [保留] 2 |
AE |
| [保留] 2 |
AF |
| [保留] 2 |
B0 | ° | 温度符 |
B1 | ± | 加/减号 |
B2 | ? | 上标 2 |
B3 | ? | 上标 3 |
B4 |
| [保留] 2 |
B5 | ? | 微符 |
B6 | ? | 段落符,pilcrow |
B7 | · | 中点 |
B8 |
| [保留] 2 |
B9 | ? | 上标 1 |
BA | ? | 阳性顺序指示符 |
BB | ? | 右角引号 |
BC | ? | 分数四分之一 |
BD | ? | 分数二分之一 |
BE |
| [保留] 2 |
BF | ? | 反向问号 |
C0 | ? | 带重音符的大写字母 A |
C1 | ? | 带尖锐重音的大写字母 A |
C2 | ? | 带音调符号的大写字母 A |
C3 | ? | 带代字号的大写字母 A |
C4 | ? | 带元音变音 (分音符号) 的大写字母 A |
C5 | ? | 带铃声的大写字母 A |
C6 | ? | 大写字母 AE 双重元音 |
C7 | ? | 带变音符号的大写字母 C |
C8 | ? | 带重音符的大写字母 E |
C9 | ? | 带尖锐重音的大写字母 E |
CA | ? | 带音调符号的大写字母 E |
CB | ? | 带元音变音 (分音符号) 的大写字母 E |
CC | ? | 带重音符的大写字母 I |
CD | ? | 带尖锐重音的大写字母 I |
CE | ? | 带音调符号的大写字母 I |
CF | ? | 带元音变音 (分音符号) 的大写字母 I |
D0 |
| [保留] 2 |
D1 | ? | 带代字号的大写字母 N |
D2 | ? | 带重音符的大写字母 O |
D3 | ? | 带尖锐重音的大写字母 O |
D4 | ? | 带音调符号的大写字母 O |
D5 | ? | 带代字号的大写字母 O |
D6 | ? | 带元音变音 (分音符号) 的大写字母 O |
D7 | OE | 大写字母 OE 连字 2 |
D8 | ? | 带斜杠的大写字母 O |
D9 | ? | 带重音符的大写字母 U |
DA | ? | 带尖锐重音的大写字母 U |
DB | ? | 带音调符号的大写字母 U |
DC | ? | 带元音变音 (分音符号) 的大写字母 U |
DD | Y | 带元音变音 (分音符号) 的大写字母 Y |
DE |
| [保留] 2 |
DF | ? | 德语高调小写字母 s |
E0 | à | 带重音符的小写字母 a |
E1 | á | 带尖锐重音的小写字母 a |
E2 | ? | 带音调符号的小写字母 a |
E3 | ? | 带代字号的小写字母 a |
E4 | ? | 带元音变音 (分音符号) 的小写字母 a |
E5 | ? | 带铃声的小写字母 a |
E6 | ? | 小写字母 ae 双重元音 |
E7 | ? | 带变音符号的小写字母 c |
E8 | è | 带重音符的小写字母 e |
E9 | é | 带尖锐重音的小写字母 e |
EA | ê | 带音调符号的小写字母 e |
EB | ? | 带元音变音 (分音符号) 的小写字母 e |
EC | ì | 带重音符的小写字母 i |
ED | í | 带尖锐重音的小写字母 i |
EE | ? | 带音调符号的小写字母 i |
EF | ? | 带元音变音 (分音符号) 的小写字母 i |
F0 |
| [保留] 2 |
F1 | ? | 带代字号的小写字母 n |
F2 | ò | 带重音符的小写字母 o |
F3 | ó | 带尖锐重音的小写字母 o |
F4 | ? | 带音调符号的小写字母 o |
F5 | ? | 带代字号的小写字母 o |
F6 | ? | 带元音变音 (分音符号) 的小写字母 o |
F7 | oe | 小写字母 oe 连字 2 |
F8 | ? | 带斜杠的小写字母 o |
F9 | ù | 带重音符的小写字母 u |
FA | ú | 带尖锐重音的小写字母 u |
FB | ? | 带音调符号的小写字母 u |
FC | ü | 带元音变音 (分音符号) 的小写字母 u |
FD | ? | 带元音变音 (分音符号) 的小写字母 y 2 |
FE |
| [保留] 2 |
FF |
| [保留] 2 |
Python实现
asciiData.decode('ascii').encode('hex')
BCD转十进制、十六进制
BCD码(Binary-Coded Decimal)亦称二进码十进数或二-十进制代码。 用4位二进制数来表示1位十进制数中的0~9这10个数码。 是一种二进制的数字编码形式,用二进制编码的十进制代码。
BCD码的优点
这种编码形式使二进制和十进制之间的转换能够快捷进行。采用BCD码,既可保存数值的精确度,又可避免使电脑作浮点运算时所消耗的时间。
BCD码分类
(1)BCD码分为有权和无权两类:
有权BCD码:8421码,2421码,5421码,…
无权BCD码:余3码,格雷码,…
其中,8421码是最常用的有权BCD码。
(2)BCD码又可分为压缩式和非压缩式两类。
各种BCD码的特点
8421码编码直观,易于理解,最常用
5421码和2421码中大于5的数字都是高位为1,5以下的高位为0
余3码是在8421码基础上加上3,有上溢出和下溢出的空间
转换规则
8421码
十进制数 | 8421码
|
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
其他较常用的BCD码
十进制数 | 5421码
| 2421码 | 余3码 |
0 | 0000 | 0000 | 0011 |
1 | 0001 | 0001 | 0100 |
2 | 0010 | 0010 | 0101 |
3 | 0011 | 0011 | 0110 |
4 | 0100 | 0100 | 0111 |
5 | 1000 | 1011 | 1000 |
6 | 1001 | 1100 | 1001 |
7 | 1010 | 1101 | 1010 |
8 | 1011 | 1110 | 1011 |
9 | 1100 | 1111 | 1100 |
## C实现
#include <stdio.h>
#include <string.h>
/
//
// 功能:二进制取反
//
// 输入: const unsigned char *src 二进制数据
// int length 待转换的二进制数据长度
//
// 输出: unsigned char *dst 取反后的二进制数据
//
// 返回: 0 success
//
//
int convert(unsigned char *dst, const unsigned char *src, int length)
{
int i;
for(i=0; i<length; i++)
{
dst[i] = src[i]^0xFF;
}
return 0;
}
//
//
// 功能:十六进制转为十进制
//
// 输入: const unsigned char *hex 待转换的十六进制数据
// int length 十六进制数据长度
//
// 输出:
//
// 返回: int rslt 转换后的十进制数据
//
// 思路:十六进制每个字符位所表示的十进制数的范围是 0 ~255 ,进制为 256
// 左移 8 位 (<<8) 等价乘以 256
//
/
unsigned long HextoDec(const unsigned char *hex, int length)
{
int i;
unsigned long rslt = 0;
for(i=0; i<length; i++)
{
rslt += (unsigned long)(hex[i])<<(8*(length-1-i));
}
return rslt;
}
/
//
// 功能:十进制转十六进制
//
// 输入: int dec 待转换的十进制数据
// int length 转换后的十六进制数据长度
//
// 输出: unsigned char *hex 转换后的十六进制数据
//
// 返回: 0 success
//
// 思路:原理同十六进制转十进制
//
int DectoHex(int dec, unsigned char *hex, int length)
{
int i;
for(i=length-1; i>=0; i--)
{
hex[i] = (dec%256)&0xFF;
dec /= 256;
}
return 0;
}
/
//
// 功能:求权
//
// 输入: int base 进制基数
// int times 权级数
//
// 输出:
//
// 返回: unsigned long 当前数据位的权
//
//
unsigned long power(int base, int times)
{
int i;
unsigned long rslt = 1;
for(i=0; i<times; i++)
rslt *= base;
return rslt;
}
/
//
// 功能: BCD 转 10 进制
//
// 输入: const unsigned char *bcd 待转换的 BCD 码
// int length BCD 码数据长度
//
// 输出:
//
// 返回: unsigned long 当前数据位的权
//
// 思路:压缩 BCD 码一个字符所表示的十进制数据范围为 0 ~ 99, 进制为 100
// 先求每个字符所表示的十进制值,然后乘以权
//
unsigned long BCDtoDec(const unsigned char *bcd, int length)
{
int i, tmp;
unsigned long dec = 0;
for(i=0; i<length; i++)
{
tmp = ((bcd[i]>>4)&0x0F)*10 + (bcd[i]&0x0F);
dec += tmp * power(100, length-1-i);
}
return dec;
}
/
//
// 功能:十进制转 BCD 码
//
// 输入: int Dec 待转换的十进制数据
// int length BCD 码数据长度
//
// 输出: unsigned char *Bcd 转换后的 BCD 码
//
// 返回: 0 success
//
// 思路:原理同 BCD 码转十进制
//
//
int DectoBCD(int Dec, unsigned char *Bcd, int length)
{
int i;
int temp;
for(i=length-1; i>=0; i--)
{
temp = Dec%100;
Bcd[i] = ((temp/10)<<4) + ((temp%10) & 0x0F);
Dec /= 100;
}
return 0;
}
//------------- 函数信息 ------------------------------------------
// 函 数 名 : BCDtoDec
// 函数描述 : BCD 码转换成十进制码
// 入口参数 : temp: 转化的 BCD 码
// 返 回 : 转化后的十进制码
// 作 者 :
// 日 期 : 2006.11.24
// 说 明 :
//
//---------------------------------------------------------------
uint8 BCDtoDec( uint8 temp )
{
return ( ( temp/16 )*10+temp%16) ;
}
//------------- 函数信息 ------------------------------------------
// 函 数 名 : DectoBCD
// 函数描述 : 十 / 十六进制码转换成 BCD 码
// 入口参数 : temp: 转化的十进制码
// 返 回 : 转化后的 BCD 码
// 作 者 :
// 日 期 : 2006.11.24
// 说 明 :
//
//---------------------------------------------------------------
uint8 DectoBCD( uint8 temp )
{
return ( (temp/10)*16 + temp%10 ) ;
}