每每遇到这些问题就要想个半天,想不明白还不舒服,今天特别把所想整理下避免以后再次进入思想漩涡!!!

计算机存储和传输都是以字节为单位
        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
        
以下给出两种实现方法:

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;
}

ASCII码、HEX、字符、BCD 等等 基础知识思考的更多相关文章

  1. AS3中ASCII码和字符互转函数

    AS3中ASCII码和字符互转函数 字符转成ASCII码: 格式:字符串变量.charCodeAt(字符位置); var str:String = “A”; trace(str.charCodeAt( ...

  2. Spring Ioc源码分析系列--Ioc的基础知识准备

    Spring Ioc源码分析系列--Ioc的基础知识准备 本系列文章代码基于Spring Framework 5.2.x Ioc的概念 在Spring里,Ioc的定义为The IoC Containe ...

  3. js中ASCII码和字符互相转换的方法

    目录 十进制ASCII码转换成字符 字符转换成十进制ASCII码 十进制ASCII码转换成字符 使用String.fromCodePoint(num1[, ...[, numN]])方法 String ...

  4. 【Python秘籍】ASCII码与字符的转换

    如何在python中显示ASCII码呢?其实你只需要记住两个函数即可:ord()和 chr(),这两个函数都是python内置的函数,不需要引入任何的包,直接就可以使用. 一.显示ASCII码 显示A ...

  5. ascii码所有字符对照表(包含汉字和外国文字)

    http://www.0xaa55.com/thread-398-1-1.html看到了0xaa55的这个帖子,想起了2年前我在51cto发的一个帖子http://down.51cto.com/dat ...

  6. simotion byte/word ASCII码转换为字符、字符串

    建立string类型,和byte类型(ASCII)的数据 将byte类型(ASCII)赋值给string中的一个字符 参考程序 VAR_GLOBAL myword :WORD; mystring :S ...

  7. python中ascii码和字符的转换

    将ASCII字符转换为对应的数值即‘a’-->65,使用ord函数,ord('a') 反正,使用chr函数,将数值转换为对应的ASCII字符,chr(65)

  8. Python ASCII码与字符相互转换

    ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和 ...

  9. (转)OpenFire源码学习之一:XMPP基础知识

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43412919 前面两张主要讲基础部分.XMPP与Mina有部分抄写于互联网的其他大事 X ...

随机推荐

  1. IOS Core Motion、UIAccelerometer(加速计使用)

    加速计 ● 加速计的作用 ● 用于检测设备的运动(比如摇晃) ● 加速计的经典应用场景 ● 摇一摇 ● 计步器 ● 加速计程序的开发 ● 在iOS4以前:使用UIAccelerometer,用法非常简 ...

  2. C/C++ memmove与memcpy的区别及实现

    1.与字符串函数strcpy区别: memcpy与memmove都是对内存进行拷贝可以拷贝任何内容,而strcpy仅是对字符串进行操作. memcpy与memmove拷贝多少是通过其第三个参数进行控制 ...

  3. 2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest

    2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest A. Fried Fish 题意:有N条鱼,有一个同时可 ...

  4. css布局-响应式布局

    响应式设计 .在不同设备上正常使用 .一般主要处理屏幕大小问题 .主要方法: .隐藏 + 折行 + 自适应空间 .rem/viewport/media query 第一个案例 <!DOCTYPE ...

  5. Golang Failpoint 的设计与实现

    小结: 1. https://mp.weixin.qq.com/s/veIoupLjM4l5SUVC6h_Gkw Golang Failpoint 的设计与实现 原创: 龙恒 PingCAP 今天  

  6. BP神经网络—java实现(转载)

    神经网络的结构 神经网络的网络结构由输入层,隐含层,输出层组成.隐含层的个数+输出层的个数=神经网络的层数,也就是说神经网络的层数不包括输入层.下面是一个三层的神经网络,包含了两层隐含层,一个输出层. ...

  7. oracle聚簇表的理解 (转自:https://blog.csdn.net/gumengkai/article/details/51009345 )

    Oracle支持两种类型的聚簇:索引聚簇和哈希聚簇 一.索引聚簇表的原理 聚簇:如果一些表有一些共同的列,则将这样一组表存储在相同的数据块中 聚簇还表示把相关的数据存储在同一个块上.利用聚簇,一个块可 ...

  8. C++ string和int相互转换

    首先需要C++ 11的支持 打开devC++,点击tools,点击编译环境,然后出现的框第一个勾选,输入-std=c++11即可 然后使用 to_string() 和 atoi() 就可以轻松实现其相 ...

  9. sql sever 基础 建表

    ---恢复内容开始--- SQL Sever 基础以创建银行数据库bankDB为案例 1.创建数据库 1-1 创建文件夹用以存放数据库 1-2 创建建库bankDB 2.创建数据库 2-1.创建用户信 ...

  10. JS小数运算失精度的问题

    JS因为是解释性语言,在运算中会有丢失精度的问题,这种现象多出现在浮点型运算的情况下. 例如 5.11 * 100  得到的结果是 511.00000000000006 这种情况尤其是在处理金额的时候 ...