计算机存储和传输都是以字节为单位
1 bit = 1 二进制数据
1 byte = 8 bit
1 字母 = 1 byte = 8 bit
1 汉字 = 2 byte = 16 bit
1. bit:位
一个二进制数据0或1,是1bit;
2. byte:字节
存储空间的基本计量单位,如:MySQL中定义 VARCHAR(45) 即是指 45个字节;
1 byte = 8 bit
3. 一个英文字符占一个字节;
1 字母 = 1 byte = 8 bit
4. 一个汉字占2个字节;
1 汉字 = 2 byte = 16 bit
5. 标点符号
A>. 汉字输入状态下,默认为全角输入方式;
B>. 英文输入状态下,默认为半角输入方式;
C>. 全角输入方式下,标点符号占2字节;
D>. 半角输入方式下,标点符号占1字节;
故:汉字输入状态下的字符,占2个字节 (但不排除,自己更改了默认设置);
英文输入状态下的字符,占1个字节 (但不排除,自己更改了默认设置);
ASCII码
因为信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。因此计算机上都配有输入和输出设备,这些设备的主要目的就是,
以一种人类可阅读的形式 将信息在这些设备上显示出来供人阅读理解。为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编
制的统一的信息交换代码,这就是ASCII码表,它的全称是“美国信息交换标准代码”。
BCD码
BCD码(Binary-Coded Decimal?)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二
进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转
换得以快捷的进行。
asc2hex
就是字符串转化成16进制数字 如:“4321” 0x34 0x33 0x32 0x31 --> 0x43 0x21
hex2asc
就是16进制数字转化成字符串 如: 0x43 0x21 --> “4321” 0x34 0x33 0x32 0x31
以下给出两种实现方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
unsigned
char
ascii_table[16] = {
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
void
hex2asc(unsigned
char
dat, unsigned
char
**
new
)
{
**
new
= ascii_table[dat >> 4];
*
new
+= 1;
**
new
= ascii_table[dat & 0x0f];
*
new
+= 1;
}
int
asc2hex(unsigned
char
dat, unsigned
char
*
new
)
{
if
((dat >=
'0'
) && (dat <=
'9'
))
*
new
= dat -
'0'
;
else
if
((dat >=
'A'
) && (dat <=
'F'
))
*
new
= dat -
'A'
+ 10;
else
if
((dat >=
'a'
) && (dat <=
'f'
))
*
new
= dat -
'a'
+ 10;
else
return
-1;
return
0;
}
void
hex2str(unsigned
char
*read, unsigned
char
**write,
int
len)
{
while
(len--)
hex2asc(*read++, write);
}
int
str2hex(unsigned
char
*read, unsigned
char
*write,
int
len)
{
unsigned
char
dat;
while
(len--) {
if
(asc2hex(*read++, &dat))
return
-1;
*write = *write << 4 | dat;
if
(!(len & 1)) {
++write;
}
}
return
0;
}
|