delphi十六进制字符串hex转byte数…
2014-06-16 18:03
232 查看
procedure Hex2Png(str: string; out png: TPngObject);
var stream: TMemoryStream;
begin
if not Assigned(png) then png :=
TPngObject.Create;
stream := TMemoryStream.Create;
stream.SetSize(Length(str) div 2);
HexToBin(PChar(str), stream.Memory,
stream.Size);
png.LoadFromStream(stream);
stream.Free;
end;
function Png2Hex(png: TPngObject): string;
var stream: TMemoryStream;
begin
stream := TMemoryStream.Create;
png.SaveToStream(stream);
SetLength(Result, stream.Size * 2);
BinToHex(stream.Memory, PChar(Result),
stream.Size);
stream.Free;
end;
function bmp2Hex(out bmp: TBitmap):string;
var stream: TMemoryStream;
begin
stream := TMemoryStream.Create;
bmp.SaveToStream(stream);
SetLength(Result, stream.Size * 2);
BinToHex(stream.Memory, PChar(Result),
stream.Size);
stream.Free;
end;
procedure Hex2bmp(str: string; out bmp: TBitmap);
var stream: TMemoryStream;
begin
if not Assigned(bmp) then
bmp := TBitmap.Create;
stream :=
TMemoryStream.Create;
stream.SetSize(Length(str) div 2);
HexToBin(PChar(str),
stream.Memory, stream.Size);
bmp.LoadFromStream(stream);
stream.Free;
end;
//十六进制字符串转入byte数组 1
function Hex2Byte(sRandomPwd:String):TByteArr;
var
Buf:TByteArr;
begin
SetLength(Buf,
Length(sRandomPwd) div 2);
// HexToBin(PAnsiChar(sRandomPwd), @Buf[0],
Length(sRandomPwd) div 2);
//HexToBin(PChar(sRandomPwd), @Buf[0],
Length(sRandomPwd) div 2);
HexToBin(PAnsiChar(sRandomPwd), @Buf[0],
Length(sRandomPwd) div 2);
Result:=buf;
end;
//自定义函数,转换十六进制数为十进制数
function HexToInt(Hexa: string): LongWord;
const
ValoresHexa: array['A'..'F'] of integer =
(10, 11, 12, 13, 14, 15);
var
nDecimal: LongWord;
nIndex: byte;
begin
nDecimal := 0;
Hexa := Uppercase(Hexa);
for nIndex := Length(Hexa) downto 1
do
if Hexa[nIndex] in ['0'..'9']
then nDecimal := nDecimal +
StrToInt(Hexa[nIndex]) *
Trunc(Exp((Length(Hexa) - nIndex) *
ln(16)))
else nDecimal := nDecimal +
ValoresHexa[Hexa[nIndex]] *
Trunc(Exp((Length(Hexa) - nIndex) *
ln(16)));
Result := nDecimal;
end;
//十六进制字符串转入byte数组 2
function Hex2Byte2(sRandomPwd:String):TByteArr;
var
Buf:TByteArr;
i:Integer;
begin
sRandomPwd := StringReplace(sRandomPwd,' ',
'',[]);
if ((Length(sRandomPwd) mod 2) <> 0)
then
begin
sRandomPwd :=
sRandomPwd+' ';
end;
i:= Trunc(Length(sRandomPwd)/2);
SetLength(Buf,i);
for i := 0 to Length(Buf)-1 do
begin
Buf[i]:=HexToInt(Copy(sRandomPwd,i*2+1,2));
end;
Result:=Buf;
end;
//byte数组转入十六进制字符串1
function Byte2Hex(arrByte:TByteArr):string;
var stream: TMemoryStream;
begin
stream := TMemoryStream.Create;
stream.Write(arrByte[0],Length(arrbyte));
SetLength(Result, stream.Size * 2);
BinToHex(stream.Memory, PChar(Result),
stream.Size);
stream.Free;
end;
//byte数组转入十六进制字符串2
function Byte2Hex2(arrByte:TByteArr):string;
var
i:integer;
begin
for i:=0 to length(arrByte)-1 do
begin
Result := Result + Copy(
IntToHex(arrByte[i],16),15,2)
end;
end;
procedure TForm1.btnHex2PngClick(Sender: TObject); var png: TPngObject; begin png := TPngObject.Create; Hex2Png(Memo1.Text, png); Canvas.Draw(0, 0, png); png.Free; end; procedure TForm1.btnPng2HexClick(Sender: TObject); var png: TPngObject; begin png := TPngObject.Create; png.LoadFromFile('dyc.png'); Memo1.Text := Png2Hex(png); png.Free; end; procedure TForm1.btnBmp2HexClick(Sender: TObject); var bmp: TBitmap; begin image1.Picture.Bitmap.SaveToFile('2.bmp'); bmp := TBitmap.Create; bmp.LoadFromFile('2.bmp'); Memo1.Text := bmp2Hex(bmp); bmp.Free; end ;
procedure TForm1.btnHex2BmpClick(Sender: TObject); var bmp: tbitmap; begin bmp := tbitmap.Create; Memo1.Text:=StringReplace(Memo1.Text,#13,'',[]); Memo1.Text:=StringReplace(Memo1.Text,#10,'',[]); Hex2bmp(Memo1.Lines.GetText,bmp); Canvas.Draw(1, 1, bmp); bmp.Free; end;
procedure TForm1.btnByte2HexClick(Sender: TObject); var m:TMemoryStream; b:TByteArr; begin m:=TMemoryStream.Create(); Image1.Picture.Bitmap.SaveToStream(m); m.Position:=0; SetLength(b,m.size); m.ReadBuffer(b[0],m.Size); Memo1.Text:=Byte2Hex2(b);//或者Memo1.Text:=Byte2Hex2(b); end;
procedure TForm1.btnHex2ByteClick(Sender: TObject); var m:TMemoryStream; b:TByteArr; bmp:TBitmap; begin b:=Hex2Byte2(Memo1.text);//或者Hex2Byte2(Memo1.text); m:=TMemoryStream.Create; m.WriteBuffer(b[0],Length(b)); m.Position:=0; m.Seek(0,soBeginning); bmp:=TBitmap.Create; bmp.LoadFromStream(m); Canvas.Draw(0,0,bmp); end;
procedure TForm1.btnHex2PngClick(Sender: TObject); var png: TPngObject; begin png := TPngObject.Create; Hex2Png(Memo1.Text, png); Canvas.Draw(0, 0, png); png.Free; end; procedure TForm1.btnPng2HexClick(Sender: TObject); var png: TPngObject; begin png := TPngObject.Create; png.LoadFromFile('dyc.png'); Memo1.Text := Png2Hex(png); png.Free; end; procedure TForm1.btnBmp2HexClick(Sender: TObject); var bmp: TBitmap; begin image1.Picture.Bitmap.SaveToFile('2.bmp'); bmp := TBitmap.Create; bmp.LoadFromFile('2.bmp'); Memo1.Text := bmp2Hex(bmp); bmp.Free; end ;
procedure TForm1.btnHex2BmpClick(Sender: TObject); var bmp: tbitmap; begin bmp := tbitmap.Create; Memo1.Text:=StringReplace(Memo1.Text,#13,'',[]); Memo1.Text:=StringReplace(Memo1.Text,#10,'',[]); Hex2bmp(Memo1.Lines.GetText,bmp); Canvas.Draw(1, 1, bmp); bmp.Free; end;
procedure TForm1.btnByte2HexClick(Sender: TObject); var m:TMemoryStream; b:TByteArr; begin m:=TMemoryStream.Create(); Image1.Picture.Bitmap.SaveToStream(m); m.Position:=0; SetLength(b,m.size); m.ReadBuffer(b[0],m.Size); Memo1.Text:=Byte2Hex2(b);//或者Memo1.Text:=Byte2Hex2(b); end;
procedure TForm1.btnHex2ByteClick(Sender: TObject); var m:TMemoryStream; b:TByteArr; bmp:TBitmap; begin b:=Hex2Byte2(Memo1.text);//或者Hex2Byte2(Memo1.text); m:=TMemoryStream.Create; m.WriteBuffer(b[0],Length(b)); m.Position:=0; m.Seek(0,soBeginning); bmp:=TBitmap.Create; bmp.LoadFromStream(m); Canvas.Draw(0,0,bmp); end;
相关文章推荐
- 十六进制字符串转化成字符串输出HexToStr(Delphi版、C#版)
- 在delphi中,如何把十进制数转换为十六进制整形数。若用inttohex只能转化为十六进制字符串。
- delphi 浮点数float转换成十六进制字符串的方法(FloatToHex)
- 十六进制字符串转化成字符串输出HexToStr(Delphi版、C#版)
- byte[]数组与十六进制字符串与字符串的互相转换
- 将byte[]转化十六进制的字符串问题剖析
- c++两个常用函数:1.二进制字符串2 hex(十六进制)。2. 栈变量字符串2堆变量
- java byte[]与十六进制字符串相互转换
- ios十进制、十六进制字符串,byte,data等之间的转换
- 怎么用Integer.toHexString(int)得到byte类型的十六进制字符串形式?
- 密码学2——Java byte数组与十六进制字符串互转
- Delphi 字符串转十六进制
- delphi inttohex 整型到十六进制
- 十六进制字符串转byte数组实现
- (学习笔记) Java byte[]转二进制字符串,十六进制字符串的相互转换
- Java byte[] 字节数组 转 二进制 八进制 十进制 十六进制字符串
- ios十进制、十六进制字符串,byte,data等之间的转换
- 十六进制 字符串 赋值到 byte
- Android中 二进制、十进制、十六进制串、byte数组、字符串、ASCII之间的相互转化
- 利用python中的hex()函数把整数转换成一个十六进制的字符串