ASCII码、HEX、字符、BCD 等等

计算机存储和传输都是以字节为单位
        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;
}
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值