具体操作步骤如下:
1、首先,在十六进制编辑模式下,左侧是行数,中间是转换后的十六进制代码,右侧是原始文本内容,如下图所示,然后进入下一步。
2、其次,如果要查看某个字符的十六进制代码,可以单击右侧的原始字符位置,在中间部分可以看到相应的十六进制值,例如,单击[5],对应的是[
35],如下图所示,然后进入下一步。
3、接着,再次复制转换后的十六进制内容,点击【全选】,如下图所示,然后进入下一步。
4、然后,单击菜单中的[编辑]-[十六进制功能]-[十六进制复制所选视图],以分别复制转换后的十六进制内容,如下图所示,然后进入下一步。
5、随后,单击菜单中的[新建文件]按钮以创建新文件,如下图所示,然后进入下一步。
6、接着,在新文件中选择[粘贴],然后将刚复制的十六进制内容粘贴到新文件中,如下图所示,然后进入下一步。
7、最后,再次单击以进入列模式。可以看到十六进制部分的内容已转换为字符,如下图所示。这样,问题就解决了。
在中间会看到一组组的十六进制数字,一组是一个字节,一个汉字占两个字节。从头算起,每两组就是一个汉字的十六进制内码。
汉字为双字节字符,即两组十六进制数表示一个汉字,而且前一个字符的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;
十六进制和汉字之间不存在转换关系。汉字在计算机内部存储用16位二进制数来存储,为了书写方便,将16位二进制数一般写出十六进制的形式,就是4位十六进制数,按照国标码和汉字机内码的转换方法,汉字存储时,每个字节的最高位均为1,也就是1******1*******的形式,转换成十六进制后,汉字的四位十六进制的第一位和第三位数均大于等于8,否则就不是汉字。