字符串与二进制数之间的互相转换
来源:互联网 发布:wireshark使用教程mac 编辑:程序博客网 时间:2024/05/21 09:02
把字符串(可含中文字符)转为二进制数的函数:ConvertStrToBin();把二进制数转换为字符串的函数:ConvertBinToStr()。
以下两个函数亦可以对包含有中文字符的字符串进行处理,逆转时亦可正常转为中文。
Function ConvertStrToBin(Value : string):string;//把字符串转化为二进制数
var tempHex : string[2];
i : integer;
begin
Result := '';
if trim(Value) = '' then Exit;
tempHex := '';
for i := 1 to Length(Value) do
begin
tempHex := IntToHex(Ord(Value[i]),2);//每个字符转成两位十六进制数
Result := Result + BinToHexEachOther(tempHex,False);//十六进制转成二进制
end;
end;
Function ConvertBinToStr(Value : string):string; //把二进制数据转化为字符串
Var tempHex : string;
i, tempInt : integer;
begin
Result := '';
if trim(Value) = '' then Exit;
tempHex := BinToHexEachOther(Value,true);//二进制转成十六进制
i := 0;
Repeat
begin
i := i + 1;
tempInt := HexCharToInt(tempHex[i]);
i := i + 1;
tempInt := tempInt * 16 + HexCharToInt(tempHex[i]);
//以上将两位十六进制数转变为一个十进制数
Result := Result + chr(TempInt); //转成ASCII码
end;
Until i >= length(tempHex)
end;
上两个互逆的函数中要调用到的函数HexCharToInt()和BinToHexEachOther()如下:
function BinToHexEachOther(ValueA : string; Action : Boolean) : string;
//把二进制串转换成十六进制串或相反
var
ValueArray1 : Array [0..15] of string[4];
ValueArray2 : Array [0..15] of char;
i : shortint;
begin
//数组初始化
ValueArray1[0] := '0000'; ValueArray1[1] := '0001'; ValueArray1[2] := '0010';
ValueArray1[3] := '0011'; ValueArray1[4] := '0100'; ValueArray1[5] := '0101';
ValueArray1[6] := '0110'; ValueArray1[7] := '0111'; ValueArray1[8] := '1000';
ValueArray1[9] := '1001'; ValueArray1[10] := '1010'; ValueArray1[11] := '1011';
ValueArray1[12] := '1100'; ValueArray1[13] := '1101'; ValueArray1[14] := '1110';
ValueArray1[15] := '1111';
for i := 0 to 15 do
if i >= 10 then ValueArray2[i] := chr(65 + (i - 10))
else ValueArray2[i] := inttostr(i)[1];
Result := '';
if Action then
begin //二进制串转换成十六进制串
if (Length(ValueA) MOD 4 <> 0) then
ValueA := stringofchar('0',Length(ValueA) MOD 4) + ValueA;
while (Length(ValueA) >= 4) do
begin
for i := 0 to 15 do
if Copy(ValueA,1,4) = ValueArray1[i] then
Result := Result + ValueArray2[i];
ValueA := Copy(ValueA,5,Length(ValueA) - 4);
end;
end
else begin //十六进制串转换成二进制串
while (Length(ValueA) >= 1) do
begin
for i := 0 to 15 do
if Copy(ValueA,1,1) = ValueArray2[i] then
Result := Result + ValueArray1[i];
ValueA := Copy(ValueA,2,Length(ValueA) - 1);
end;
end;
end;
function HexCharToInt(HexToken : char):Integer;
begin
Result:=0;
if (HexToken>#47) and (HexToken<#58) then { chars 0....9 }
Result:=Ord(HexToken)-48
else if (HexToken>#64) and (HexToken<#71) then { chars A....F }
Result:=Ord(HexToken)-65 + 10;
end;
十六进制字串转十进制又一法:
procedure TForm1.BitBtn1Click(Sender: TObject);
var myint : integer;
begin
myint := StrToInt('$' + '3A'); // myint = 58
showmessage(inttostr(myint));
end;
以下两个函数亦可以对包含有中文字符的字符串进行处理,逆转时亦可正常转为中文。
Function ConvertStrToBin(Value : string):string;//把字符串转化为二进制数
var tempHex : string[2];
i : integer;
begin
Result := '';
if trim(Value) = '' then Exit;
tempHex := '';
for i := 1 to Length(Value) do
begin
tempHex := IntToHex(Ord(Value[i]),2);//每个字符转成两位十六进制数
Result := Result + BinToHexEachOther(tempHex,False);//十六进制转成二进制
end;
end;
Function ConvertBinToStr(Value : string):string; //把二进制数据转化为字符串
Var tempHex : string;
i, tempInt : integer;
begin
Result := '';
if trim(Value) = '' then Exit;
tempHex := BinToHexEachOther(Value,true);//二进制转成十六进制
i := 0;
Repeat
begin
i := i + 1;
tempInt := HexCharToInt(tempHex[i]);
i := i + 1;
tempInt := tempInt * 16 + HexCharToInt(tempHex[i]);
//以上将两位十六进制数转变为一个十进制数
Result := Result + chr(TempInt); //转成ASCII码
end;
Until i >= length(tempHex)
end;
上两个互逆的函数中要调用到的函数HexCharToInt()和BinToHexEachOther()如下:
function BinToHexEachOther(ValueA : string; Action : Boolean) : string;
//把二进制串转换成十六进制串或相反
var
ValueArray1 : Array [0..15] of string[4];
ValueArray2 : Array [0..15] of char;
i : shortint;
begin
//数组初始化
ValueArray1[0] := '0000'; ValueArray1[1] := '0001'; ValueArray1[2] := '0010';
ValueArray1[3] := '0011'; ValueArray1[4] := '0100'; ValueArray1[5] := '0101';
ValueArray1[6] := '0110'; ValueArray1[7] := '0111'; ValueArray1[8] := '1000';
ValueArray1[9] := '1001'; ValueArray1[10] := '1010'; ValueArray1[11] := '1011';
ValueArray1[12] := '1100'; ValueArray1[13] := '1101'; ValueArray1[14] := '1110';
ValueArray1[15] := '1111';
for i := 0 to 15 do
if i >= 10 then ValueArray2[i] := chr(65 + (i - 10))
else ValueArray2[i] := inttostr(i)[1];
Result := '';
if Action then
begin //二进制串转换成十六进制串
if (Length(ValueA) MOD 4 <> 0) then
ValueA := stringofchar('0',Length(ValueA) MOD 4) + ValueA;
while (Length(ValueA) >= 4) do
begin
for i := 0 to 15 do
if Copy(ValueA,1,4) = ValueArray1[i] then
Result := Result + ValueArray2[i];
ValueA := Copy(ValueA,5,Length(ValueA) - 4);
end;
end
else begin //十六进制串转换成二进制串
while (Length(ValueA) >= 1) do
begin
for i := 0 to 15 do
if Copy(ValueA,1,1) = ValueArray2[i] then
Result := Result + ValueArray1[i];
ValueA := Copy(ValueA,2,Length(ValueA) - 1);
end;
end;
end;
function HexCharToInt(HexToken : char):Integer;
begin
Result:=0;
if (HexToken>#47) and (HexToken<#58) then { chars 0....9 }
Result:=Ord(HexToken)-48
else if (HexToken>#64) and (HexToken<#71) then { chars A....F }
Result:=Ord(HexToken)-65 + 10;
end;
十六进制字串转十进制又一法:
procedure TForm1.BitBtn1Click(Sender: TObject);
var myint : integer;
begin
myint := StrToInt('$' + '3A'); // myint = 58
showmessage(inttostr(myint));
end;
- 字符串与二进制数之间的互相转换
- 字符串与二进制数之间的互相转换
- 字符串与二进制数之间的互相转换
- 二进制数与十六进制数之间如何互相转换
- 字符串与数字之间的互相转换
- 字符串与数字之间的互相转换
- 字符串与数字之间的互相转换
- 十进制小数与二进制小数之间的互相转换
- 十进制与二进制八进制十六进制之间的互相转换
- 二进制与字符串之间的转换
- 二进制数据与字符串之间的转换
- Unicode字符串与CString字符串之间的互相转换
- 字节数组与浮点数之间的互相转换(IEEE)
- Java字符串与整数之间的互相转换
- java字符串与整数之间的互相转换
- java字符串与整数之间的互相转换
- java字符串与整数之间的互相转换
- java字符串与整数之间的互相转换
- VISUAL STUDIO 检测内存泄露 (FROM MSDN)
- Spring Framework : Introduction to Spring's jars
- 开始学习oracle ebs r12--第二次失败的安装 (8)
- 去掉重复字符
- 固定电话增值业务使用方法
- 字符串与二进制数之间的互相转换
- Using the CAB Wizard
- spring 框架配置文件详解
- Javascript兼容多种浏览器
- 为 Microsoft SQL Server 登录名添加或更改密码。
- Headache
- ACPI
- 工作中的疏忽
- Const用法小结