16进制转汉字的原理是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16进制转汉字的原理是啥相关的知识,希望对你有一定的参考价值。

为什么要先计算长度,然后转成ASC码 原理是啥 知道的告诉下

一、ASCII码是计算机进行信息交换的最基本字符标准,例如,键盘与计算机主机之间的通信就是靠ASCII的标准来支持的。例如: 大写字母A的ASCII码就是十进制数65,数字0的ASCII就是48,小写字母a的ASCII码就是十进制数97等。 二、汉字机内码与国标码的换算关系。 把国标码的汉字代码中的区码与位码分别换算为16进制数,然后再分别加上十六进制数80,即为该汉字的机内码。 第十三节 数在计算机中的表示 计算机中的数的表示 人们习惯用十进制数,它有两个特点:①基数为10,②逢十进一(其它数制特点亦 n-1 类似),可表示为(A)10=∑ ki*10 i=-m 一)、数制 计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二进制的缩写。 一般计数都采用进位计数,其特点是: (1)逢N进一,N是每种进位计数制表示一位数所需要的符号数目为基数。 (2)采用位置表示法,处在不同位置的数字所代表的值不同,而在固定位置上单位数字表示的值是确定的,这个固定位上的值称为权。 在计算机中:D7 D6 D5 D4 D3 D2 D1 D0 只有两种0和1 二)、数制转换 不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的。也就是说,若转换前两数相等,转换后仍必须相等。 要求以下四种进制: 十进制:有10个基数:0 ~~ 9 ,逢十进一 二进制:有2 个基数:0 ~~ 1 ,逢二进一 八进制:有8个基数:0 ~~ 7 ,逢八进一 十六进制:有16个基数:0 ~~ 9,A,B,C,D,E,F (A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一 1、数的进位记数法 N=an-1*pn-1+an-2*pn-2+…+a2*p2+a1*p1+a0*p0 2、十进制数与P进制数之间的转换 ①十进制转换成二进制:十进制整数转换成二进制整数通常采用除2取余法,小数部分乘2取整法。例如,将(30)10转换成二进制数。 将(30)10转换成二进制数 2|30 ….0 ----最右位 2|15 ….1 2| 7 ….1 2| 3 ….1 1….1 ----最左位 ∴ (30)10=(11110)2 将(30)10转换成八、十六进制数 8| 30 ……6 ------最右位 3 ------最左位 ∴ (30)10 =(36)8 16| 30 …14(E)----最右位 1 ----最左位 ∴(30)10 =(1E)16 参考技术A 一、ASCII码是计算机进行信息交换的最基本字符标准,例如,键盘与计算机主机之间的通信就是靠ASCII的标准来支持的。例如: 大写字母A的ASCII码就是十进制数65,数字0的ASCII就是48,小写字母a的ASCII码就是十进制数97等。

二、汉字机内码与国标码的换算关系。 把国标码的汉字代码中的区码与位码分别换算为16进制数,然后再分别加上十六进制数80,即为该汉字的机内码。 第十三节 数在计算机中的表示 计算机中的数的表示 人们习惯用十进制数,它有两个特点:①基数为10,②逢十进一(其它数制特点亦 n-1 类似),可表示为(A)10=∑ ki*10 i=-m 一)、数制 计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二进制的缩写。
一般计数都采用进位计数,其特点是:
(1)逢N进一,N是每种进位计数制表示一位数所需要的符号数目为基数。
(2)采用位置表示法,处在不同位置的数字所代表的值不同,而在固定位置上单位数字表示的值是确定的,这个固定位上的值称为权。 在计算机中:D7 D6 D5 D4 D3 D2 D1 D0 只有两种0和1

二)、数制转换 不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的。也就是说,若转换前两数相等,转换后仍必须相等。 要求以下四种进制: 十进制:有10个基数:0 ~~ 9 ,逢十进一 二进制:有2 个基数:0 ~~ 1 ,逢二进一 八进制:有8个基数:0 ~~ 7 ,逢八进一 十六进制:有16个基数:0 ~~ 9,A,B,C,D,E,F(A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一

1、数的进位记数法 N=an-1*pn-1+an-2*pn-2+…+a2*p2+a1*p1+a0*p0

2、十进制数与P进制数之间的转换 ①十进制转换成二进制:十进制整数转换成二进制整数通常采用除2取余法,小数部分乘2取整法。例如,将(30)10转换成二进制数。 将(30)10转换成二进制数 2|30 ….0 ----最右位 2|15 ….1 2| 7 ….1 2| 3 ….1 1….1 ----最左位 ∴ (30)10=(11110)2 将(30)10转换成八、十六进制数 8| 30 ……6 ------最右位

3 ------最左位 ∴ (30)10 =(36)8 16| 30 …14(E)----最右位 1 ----最左位 ∴(30)10 =(1E)16
参考技术B 比如常用的ANSI编码或Unicode编码等,才能对应一个“汉字”

比如“手”字的ANSI编码是D6CA,而Unicode编码是624B

一、ascii码是计算机进行信息交换的最基本字符标准,例如,键盘与计算机主机之间的通信就是靠ascii的标准来支持的。例如: 大写字母A的ASCII码就是十进制数65,数字0的ASCII就是48,小写字母a的ASCII码就是十进制数97等。
二、汉字机内码与国标码的换算关系。 把国标码的汉字代码中的区码与位码分别换算为16进制数,然后再分别加上十六进制数80,即为该汉字的机内码。 第十三节 数在计算机中的表示 计算机中的数的表示 人们习惯用十进制数,它有两个特点:①基数为10,②逢十进一(其它数制特点亦 n-1 类似),可表示为(A)10=∑ ki*10 i=-m 一)、数制 计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二进制的缩写。 一般计数都采用进位计数,其特点是: (1)逢N进一,N是每种进位计数制表示一位数所需要的符号数目为基数。 (2)采用位置表示法,处在不同位置的数字所代表的值不同,而在固定位置上单位数字表示的值是确定的,这个固定位上的值称为权。
在计算机中:D7 D6 D5 D4 D3 D2 D1 D0 只有两种0和1 二)、数制转换 不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的。也就是说,若转换前两数相等,转换后仍必须相等。 要求以下四种进制: 十进制:有10个基数:0 ~~ 9 ,逢十进一 二进制:有2 个基数:0 ~~ 1 ,逢二进一 八进制:有8个基数:0 ~~ 7 ,逢八进一 十六进制:有16个基数:0 ~~ 9,A,B,C,D,E,F (A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一 1、数的进位记数法 N=an-1*pn-1+an-2*pn-2+…+a2*p2+a1*p1+a0*p0 2、十进制数与P进制数之间的转换 ①十进制转换成二进制:十进制整数转换成二进制整数通常采用除2取余法,小数部分乘2取整法。例如,将(30)10转换成二进制数。 将(30)10转换成二进制数 2|30 ….0 ----最右位 2|15 ….1 2| 7 ….1 2| 3 ….1 1….1 ----最左位 ∴ (30)10=(11110)2 将(30)10转换成八、十六进制数 8| 30 ……6 ------最右位 3 ------最左位 ∴ (30)10 =(36)8 16| 30 …14(E)----最右位 1 ----最左位 ∴(30)10 =(1E)16

十六进制转汉字

这是存在Linux utf-8 hbase中的汉字字节
\xE6\x9D\x83\xE5\xA8\x81\xE6\x8C\x87\xE5\x8D\x97 (正确应为“权威指南“)
谁帮我在java中转成汉字 告诉我是如何转的 谢谢了

byte[] bn=(byte)0xE6,(byte)0x9D,(byte)0x83, // 权
(byte)0xE5,(byte)0xA8,(byte)0x81, // 威
(byte)0xE6,(byte)0x8C,(byte)0x87, // 指
(byte)0xE5,(byte)0x8D,(byte)0x97 ; // 南

String s;
try

s=new String(bn,"utf-8"); // 源码制 utf-8

catch(Exception e)

s="error";

// 显示串 s, 的确是“权威指南”
// utf-8 码长是不定的,原英文等ASCII码只要一字节,对西方有利,
拉丁文、阿拉伯文等 两字节,
而汉字等文字则为三字节,相比Unicode变长了。
。。。
所以,汉字串“权威指南”则为3X4=12个字节了,
百度下:
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

问题都答到位了,若满意请及时采纳!!
参考技术A 汉字为双字节字符,即两组十六进制数表示一个汉字,而且前一个字符的ASC码大于 127。

给个转换为字符(包括汉字)Delphi 的例子:

procedure TForm1.Button1Click(Sender: TObject);
function DeleteSpace(ss: String): String;
var //删除字符串中所有的空格
i: Integer;
begin
Result := ss;
i := 1;
while i <= Length(Result) do begin
if Result[i] = ' ' then Delete(Result, i, 1)
else Inc(i);
end;
end;
procedure GetData(const ss: String; var dt: Array of Integer);
var
i,j: Integer;
sb: String;
begin
for i := Low(dt) to High(dt) do begin
j := 2 * i + 1;
sb := ss[j] + ss[j + 1];
dt[i] := StrToInt('$' + sb);
end;
end;
var
ss,sb,rt: String;
ac: Byte;
id,ct: Integer;
dt: Array of Integer;
begin
Edit2.Text := '';
ss := DeleteSpace(Edit1.Text); //去掉所有空格
ct := Length(ss);
if (ct mod 2) <> 0 then begin //首位<10
ss := '0' + ss;
Inc(ct);
end;
if ss[2] = 'x' then begin //考虑 0x878ABD7DB7CF 格式
Delete(ss, 1, 2);
Dec(ct, 2);
end;
SetLength(dt, ct div 2);
GetData(ss, dt);
rt := '';
if ct > 0 then begin
id := Low(dt);
while id <= High(dt) do begin
ac := dt[id];
if ac < 128 then begin // 单字节字符
sb := Chr(ac);
Inc(id);
end else begin //双字节字符
sb := Chr(ac) + Chr(dt[id + 1]);
Inc(id, 2);
end;
rt := rt + sb;
end;
end;
Edit2.Text := rt;
end;
是否可以解决您的问题?追问

为何这四字却有12个字节 一直不知道这到底是什么格式的

以上是关于16进制转汉字的原理是啥的主要内容,如果未能解决你的问题,请参考以下文章

串口助手怎么既显示16进制数有显示汉字??

十六进制转汉字

汉字转UTF8 16进制字符串

汉字转UTF8 16进制字符串

汉字转UTF8 16进制字符串

汉字转UTF8 16进制字符串