有如下数据:
97F34E5064AD6532
要求转换成这样的格式:
97 F3 4E 50 64 AD 65 32 00 00 00 00 00 00 00 00 ;
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;既,在原串的偶数位后加上空格,然后将它补齐成如上格式,将字符串补齐为64个字节( 在Unicode编码中)
由于原串的数据量太大,转换之后还要写到文本文件中,不足的就用 00 补齐
不知哪位可以给出高效的算法
97F34E5064AD6532
要求转换成这样的格式:
97 F3 4E 50 64 AD 65 32 00 00 00 00 00 00 00 00 ;
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;既,在原串的偶数位后加上空格,然后将它补齐成如上格式,将字符串补齐为64个字节( 在Unicode编码中)
由于原串的数据量太大,转换之后还要写到文本文件中,不足的就用 00 补齐
不知哪位可以给出高效的算法
0049006E00730069006400650020004D0065006D006F00720079
也有这种格式的,就是说,原串长度是不确定的,要转换成如下格式:
00 49 00 6E 00 73 00 69 00 64 00 65 00 20 00 4D ;
00 65 00 6D 00 6F 00 72 00 79 00 00 00 00 00 00 ;
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;
const
BufSize=64*2;
var
Buf:array[0..BufSize-1] of char;
c:string;
begin
c:='0049006E00730069006400650020004D0065006D006F00720079';
FillChar(Buf,BufSize,'0');//填充字符 '0'
Move(c[1],Buf,length(c));//将现有数据拷贝到buf
end;
//Buf安你的格式写入文件就行了
新建一个文本文件,让它以 Unicode编码格式保存,并写入十六进制数要怎么实现?
比如,创建一个文本文件,让它以 Unicode编码的格式保存,然后再写入十六进制的数,要怎么实现?还有就是怎么以十六进制的方式打开一个文件??????
const
align = 64;
align_size = align * 2 + align - 1;
hextables: PChar = '0123456789ABCDEF';
var
zerolen: Integer;
S: PByte;
R: PChar;
begin
if size > align then
size := align;
zerolen := align - size;
Result := StringOfChar(#0, align_size);
S := @Buf;
R := PChar(Result);
while size > 0 do
begin
R[0] := hextables[S^ shr 4];
R[1] := hextables[S^ and 3];
R[2] := #32;
Inc(S);
Inc(R, 3);
Dec(size);
end;
while zerolen > 0 do
begin
R[0] := '0';
R[1] := '0';
Dec(zerolen);
if zerolen <= 0 then break;
R[2] := #32;
Inc(R, 3);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
S := #$97#$F3#$4E#$50#$64#$AD#$65#$32 ;
Memo1.Text := get(s[1], length(s));
end;
将长度是size的buf,进行16进制字符转换,转换长度固定为align_size,你试试不就清楚了?哪里不明?你的要求不是按那样转换的吗?16进制转换啊,就那么几句话而已,你的要求不过就是有个固定长度和补0的情况啊。
begin
R[0] := hextables[S^ shr 4];
R[1] := hextables[S^ and 3];
R[2] := #32;
Inc(S);
Inc(R, 3);
Dec(size);
end; R[1] := hextables[S^ and 3];
改成:
R[1] := hextables[S^ and $F];
之前写的快了些,没注意到.
其中操作:
V shr 4 ==> V div 16
V and $F ==> V mod 16
平常怎么写文件,就怎么写啊,这个不用问吧。搞不懂你说什么。
什么叫:
>> 97F34E5064AD6532..00 这样的一个字符串数组以16进制的方式
是
var
S: array [0..X] of Char;S[0] := $#97;
S[1] := $#F3;
...
还是:
S[0] := '9';
S[1] := '7';还是其它?
什么叫:
> > 97F34E5064AD6532..00 这样的一个字符串数组以16进制的方式
是
var
S: array [0..X] of Char; S[0] := $#97;
S[1] := $#F3;
------------------------
这样得来的数组是一个字符串形式的,现在要将它转换成对应的字符写入到文件中
97 F3 4E 10 64 AD 65 32 00 00 00 00 这样的
function TFrmMenu.AnsiToUnicode(Ansi: Variant): string; //ANSI转换为 Unicode码
var s:string;
i:integer;
j,k:string[2];
a:array [1..1000] of char;
Temp:Pwidechar;
begin
s:='';
Temp:=StringToWideChar(Ansi,@(a[1]),512);
i:=1;
while ((a[i]<>#0) or (a[i+1]<>#0)) do
begin
j:=IntToHex(Integer(a[i]),2);
k:=IntToHex(Integer(a[i+1]),2);
s:=s+k+j;
i:=i+2;
end;
Result:=s;
end;
比如泰文,这样转出来的全是 ????? 的unicode码...不知道要怎么办了,接收的参数Ansi是正确的: '2)2D-|"', 可就是得不到这个串的unicode码,而是 ????? 的unicode编码,请问要怎么办??