📄 main.~pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class (TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
Button2: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
function Convert(s:Byte): string;
public
{1 将十六进制数化为字符 }
function HEXtoSTR(StringStream:TStringStream): TStringStream;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{
************************************ TForm1 ************************************
}
procedure TForm1.Button1Click(Sender: TObject);
var
aa: TstringStream;
hz_buffer: array of byte;
tep: array[0..31] of byte;
i,size:integer;
hzfile:TfileStream;
begin
hzfile:=TfileStream.Create('hzk16',fmOpenRead );
aa:=TstringStream.Create('');
//取得汉字的编码
aa.WriteString(form1.Edit1.Text);
//将编码取出
setlength(hz_buffer,aa.size);
aa.Position:=0;
aa.ReadBuffer(hz_buffer[0],aa.size);
// 将编码化为区位码
for i:=0 to aa.Size-1 do
begin
hz_buffer[i]:=hz_buffer[i]-160;
end;
//的到点阵
size:=aa.Size;
aa.Size:=0;
for i:=0 to (size div 2) -1 do
begin
hzfile.Position:=((hz_buffer[2*i]-1)*94+hz_buffer[2*i+1]-1)*32;
hzfile.Read(tep[0],32);
aa.WriteBuffer(tep[0],32);
end;
// 启动转换
aa:=HEXtoSTR(aa);
aa.Position:=0;
form1.Memo1.Lines.LoadFromStream(aa);
aa.Free;
hzfile.Free;
end;
function TForm1.Convert(s:Byte): string;
var
high, low: Byte;
out_str: string;
begin
out_str:='';
low:=s and $0f;
high:=s shr 4;
if high<=$09 then
out_str:=out_str+chr(high+$30)
else
out_str:=out_str+chr(high+$37);
if low<=$09 then
out_str:=out_str+chr(low+$30)
else
out_str:=out_str+chr(low+$37);
out_str:='0x'+out_str+',';
Result:=out_str;
end;
function TForm1.HEXtoSTR(StringStream:TStringStream): TStringStream;
var
in_buffer: Array of byte;
i, j, in_size: Integer;
out_buffer: AnsiString;
begin
out_buffer:='';
in_size:=StringStream.size; //取得数据流的长度
setlength(in_buffer,in_size);//给读数据区分配空间
StringStream.Position:=0; //读出数据
StringStream.ReadBuffer(in_buffer[0],in_size);
StringStream.Size:=0 ; //输入数据清零
//开始转化
// 行的循环
for i:=0 to ((in_size div 8)-1) do
begin
for j:=0 to 7 do
begin
out_buffer:=out_buffer+Convert(in_buffer[i*8+j]);
end;
out_buffer:=out_buffer+chr($0d)+chr($0a);
end;
//余数的循环
j:= (in_size div 8)*8;
for i:=0 to ((in_size mod 8)-1) do
begin
out_buffer:=out_buffer+Convert(in_buffer[i+j]);
end;
out_buffer:=out_buffer+chr($0d)+chr($0a);
//回写
StringStream.WriteString(out_buffer);
Result:=StringStream;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Memo1.Lines.SaveToFile('MyHzk.txt');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -