BSOne.SFC/Tocsg.Lib/VCL/Tocsg.Binary.pas

74 lines
1.4 KiB
Plaintext

unit Tocsg.Binary;
interface
uses
Winapi.Windows, System.SysUtils, System.Classes;
function ConvBytesToHexStr(pBuf: PByte; dwSize: DWORD): AnsiString;
function ConvHexStrToBytes(sSrc: String; var pBuf: TBytes): Integer;
implementation
uses
Tocsg.Exception;
function ConvBytesToHexStr(pBuf: PByte; dwSize: DWORD): AnsiString;
var
i: Integer;
sTemp, sHex: AnsiString;
begin
Result := '';
try
// for i := 0 to dwSize - 1 do
// Result := Result + Format('%.2x', [pBuf[i]]);
// 속도 개선 25_0415 14:45:22 kku
SetLength(sTemp, dwSize * 2);
for i := 0 to dwSize - 1 do
begin
sHex := Format('%.2x', [pBuf[i]]);
CopyMemory(@sTemp[(i * 2) + 1], @sHex[1], 2);
end;
Result := sTemp;
except
on E: Exception do
ETgException.TraceException(E, 'Fail .. ConvBytesToHexStr()');
end;
end;
function ConvHexStrToBytes(sSrc: String; var pBuf: TBytes): Integer;
var
HexList: TStringList;
i, nLen: Integer;
begin
nLen := Length(sSrc);
if (nLen mod 2) <> 0 then
begin
sSrc := '0' + sSrc;
Inc(nLen);
end;
HexList := TStringList.Create;
try
i := 0;
while i < nLen do
begin
HexList.Add(sSrc.Substring(i, 2));
Inc(i, 2);
end;
Result := HexList.Count;
if Result <= 0 then
exit;
SetLength(pBuf, Result);
for i := 0 to HexList.Count - 1 do
pBuf[i] := StrToIntDef('$' + HexList[i], 0);
finally
FreeAndNil(HexList);
end;
end;
end.