有如下数据:
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 补齐
不知哪位可以给出高效的算法

解决方案 »

  1.   

    补充一点,
    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 ; 
      

  2.   


    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安你的格式写入文件就行了
      

  3.   

    very good  DDDDDDDDDDDDD
      

  4.   

    谢了,以十六进制的格式读写文件,用文件流,哪位有用过呀?
    新建一个文本文件,让它以 Unicode编码格式保存,并写入十六进制数要怎么实现?
      

  5.   

    哪位知道用文件流操作十六进制的文件? 
    比如,创建一个文本文件,让它以   Unicode编码的格式保存,然后再写入十六进制的数,要怎么实现?还有就是怎么以十六进制的方式打开一个文件??????
      

  6.   

    unicode文件,前面两字节是FF FE,后面为unicode字串的文本,根据这写就行了。转换function Get(const buf; size: Integer): string;
    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;
      

  7.   

    get(const buf; size: Integer)
    将长度是size的buf,进行16进制字符转换,转换长度固定为align_size,你试试不就清楚了?哪里不明?你的要求不是按那样转换的吗?16进制转换啊,就那么几句话而已,你的要求不过就是有个固定长度和补0的情况啊。
      

  8.   

    谢谢,可是,我要把 97F34E5064AD6532..00 这样的一个固定长度的字符数组,以16进制的方式写入到文本里面,不知道要怎么写哪,就是要把97,F3,4E,50,64,AD,65,32,00转换成十六进制的字符,写入到文件中
      

  9.   

    嗯,谢谢,现在要把 97F34E5064AD6532..00  这样的一个字符串数组以16进制的方式写入到文本文件中,请问有什么好的办法?就是让这个文件,以16进制的方式查看时,显示的是 97 F3 4E 50 64 AD 65 32 00 00 00 00 这样....
      

  10.   

    有些问题:  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;  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';还是其它?
      

  11.   

    eg. 十六进制字符97 转换成 十六进制数$97对应的字符:char(strtoint('$'+'97'))
      

  12.   

    平常怎么写文件,就怎么写啊,这个不用问吧。搞不懂你说什么。 
    什么叫: 
    > >   97F34E5064AD6532..00           这样的一个字符串数组以16进制的方式 
    是 
    var 
        S:   array   [0..X]   of   Char; S[0]   :=   $#97; 
    S[1]   :=   $#F3; 
    ------------------------
    这样得来的数组是一个字符串形式的,现在要将它转换成对应的字符写入到文件中
      

  13.   

    自己都要晕了,就是不管怎么操作,最后要得到这样的效果,用UE或其它16进制编译器查看文件时,显示的是 
    97 F3 4E 10 64 AD 65 32 00 00 00  00 这样的
      

  14.   

    不让它沉了,将其它国的语言转换为unicode码要怎么转?
    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编码,请问要怎么办??