问题是这样的:
var
f:file of string[8];
s1:string;
s2:string;
i:integer;
j:integer;
s8:string[8];
begin
AssignFile(f,'asd.pgm');
s:='9999999999999';//13个9
s8:=function(s);
//需要大家帮忙写这个函数
 Rewrite(f);
Write(f,s8);
Closefile(f);
{
//最后得到的文件的内容如下:
9f 86 01 00 ff e0 f5 05
以上是文件内容
下边是分别对应13个9转化成16进制位置
5  6  7  8  1  2  3  4
其实后4位也就是9 9 9 9 9 9 9 9转化为16进制后倒置后排列的  //8个9
前4位是99999转化为16进制后倒置后排列的   //5个9』}end;

解决方案 »

  1.   

    这样啊,呵呵,DELPHI提供的函数,inttostr,strtoint,是字符与整数间转换,copy是字符串拷贝或取了串,
    function IntToHex(Value: Integer; Digits: Integer): string; overload;
    function IntToHex(Value: Int64; Digits: Integer): string; overload;
    对数字进行十六进制转换
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
        aa:myrec;
        f:file of byte;
    begin
      s:='9999999999999';
      aa.a1:=StrToint(copy(s,1,5));
      aa.b1:=StrToint(copy(s,6,9));
      assignfile(f,'c:\test.dat');
      rewrite(f);
      blockwrite(f,aa,sizeof(aa));
      closefile(f);
    end;
      

  3.   

    function toS8:string;
    const
     s1='99999999';
     s2='99999';
    var
      n:Integer;
    begin
      SetLength(Result,8);
      n:=StrToInt(s2);
      StrLCopy(PChar(Result),@n,4);
      n:=StrToInt(s1);
      StrLCat(PChar(Result),@n,8);
    end;
      

  4.   

    function G(const Value: string): TStringList;//将s:='9999999999999';//13个9为参数var
      s1, a1, s2, a2, T1, T2: string;
      i, j: integer;
    begin
      Result := TStringList.Create;
      s1 := IntToHex(StrToInt(Copy(Value, 1, 5)), 8);
      s2 := IntToHex(StrToInt(Copy(Value, 6, 8)), 8);
      SetLength(a1, 8);
      SetLength(a2, 8);
      for i := 1 to 4 do
      begin
        T1 := Copy(s1, i * 2 - 1, 2);
        T2 := Copy(s2, i * 2 - 1, 2);    for j := 1 to 2 do
        begin
          a1[8-(i*2-j)] := T1[j];
          a2[8-(i*2-j)] := T2[j];
        end;
      end;
      Result.Add(a1+a2);
      Result.Add('5  6  7  8  1  2  3  4');
    end;返回结果:
    9F860100FFE0F505
    5  6  7  8  1  2  3  4测试及使用方法:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      List:TStringList;
      s:string;
    begin
      s:='9999999999999';
      List:=G(s);
      Memo1.Lines.Assign(List);
      List.Free;end;
      

  5.   

    zjqyb(风清扬*任它溺水三千,我只取一瓢饮*) 老兄,myrec是什么东西我怎么不知道呀!
      

  6.   

    madyak(无天) 老兄给的只是把9f 86 01 00 ff e0 f5 05
    的ascii给显示出来了我用chr试验一下在说
    hiflower(花)老兄的结果倒是很接近
      

  7.   

    function toS8:string;
    const
     s1='99999999';
     s2='99999';
    var
      n:Integer;
    begin
      SetLength(Result,8);
      n:=StrToInt(s2);
      StrLCopy(PChar(Result),@n,4);
      n:=StrToInt(s1);
      StrLCat(PChar(Result),@n,8);
    end;
      

  8.   

    不对呀,那个G函数返回的对象中,字符串是符合你的要求得,你指得'ascii给显示'是在哪显示得?如果与你的要求有差距,你可将函数返回对象中的字符串,再处理一下就行了,好好测试一下,先别在文件中写,先观查转换得是否符合要求,
      

  9.   

    hiflower(花)老兄的结果是 00 9f 86 01 00 实际上为 9f 86 01 00并且是定长字符串的
    我们的要求是不定长字符串的例如我给的是 s:='123';
    sui
      

  10.   

    madyak(无天)老兄:我转化过,但是还不对我是写进文件后观察的看到文件里结果是那些字符串的asii
    而不是转化后的16进制
      

  11.   

    madyak(无天)老兄:你有空帮我该该hiflower(花)老兄的吧他的已经很接近了只是有些函数我没有用过,也觉得很难改,这2天头都大了!
      

  12.   

    sorry !!try
    type
      myrec=record
       a1,b1:integer;
     end;
    procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
        aa:myrec;
        f:file of byte;
    begin
      s:='9999999999999';
      aa.a1:=StrToint(copy(s,1,5));
      aa.b1:=StrToint(copy(s,6,9));
      assignfile(f,'c:\test.dat');
      rewrite(f);
      blockwrite(f,aa,sizeof(aa));
      closefile(f);
    end;
      

  13.   

    你有没有执行上上面程序
    完全满足'9999999999999'->
    9f 86 01 00 ff e0 f5 05
      

  14.   

    function toS8(s:string):string;
    var
      s1,s2:string;
      n:Integer;
    begin
    // s1='99999999';
    // s2='99999';
      s:=Trim(s);
      if Length(s)>13 then raise Exception.Create('Too Large!');
      s1:=RightStr(s,8);
      n:=Length(s)-8;
      if n<0 then
        s2:='0'
      else
        s2:=Copy(s,1,n);
      SetLength(Result,8);
      n:=StrToInt(s2);
      Move(n,Result[1],4); //原来的 StrLCopy 和 StrLCat 不可靠,改用 Move
      n:=StrToInt(s1);
      Move(n,Result[5],4);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
     s:string[8];
    begin
      s:=ToS8(edit1.Text);
      caption:=s; //此处设断点
    end;观察 s 的值:
        输入       '9999999999999'    '123'
    ord(s[0])           $8              $8  //$8,这是字符串的长度
    ord(s[1])           $9F             $00
    ord(s[2])           $86             $00
    ord(s[3])           $01             $00
    ord(s[4])           $00             $00
    ord(s[5])           $FF             $7B
    ord(s[6])           $E0             $00
    ord(s[7])           $F5             $00
    ord(s[8])           $05             $00
      

  15.   

    感谢hiflower(花)老兄,感谢zjqyb(风清扬*任它溺水三千,我只取一瓢饮*) ,感谢madyak(无天)老兄,问题应该是解决了,我用的是hiflowe(花)老兄的函数,等我测试一下其他的提供的方案就结贴呵呵,顺便和大家教个朋友:34144002!
    小弟是青岛的
    希望有机会可以感谢几位老兄,有空请大家吃海鲜!
    呵呵!
      

  16.   

    hiflower(花)兄把c的思想用于pascal绝对是一绝,hiflower(花)肯定也是c方面的高手呵呵!
      

  17.   

    生意都被你们给抢了 madyak(无天) 
     hiflower(花) 
     zjqyb(风清扬*任它溺水三千,我只取一瓢饮*) 你们三个真行.
    我每次都来晚了...