如何从二进制数组中分别读取指定字段为 WORD string类型?

解决方案 »

  1.   

    所有的數據存儲都是二進制的。要看你能不能轉到對應的數據類型。 轉WORD 可以強行轉換STRING 我想更應該是Array[0..0] of char  這樣的吧?
      

  2.   

    word是2个byte的吧,那该怎么操作?
      

  3.   

    void *memcpy( 
       void* dest, 
       const void* src, 
       size_t count 
    );
    如果是要获取WORD第3个参数就 sizeof(WORD)
    如果是要获取string用char *strcpy( char *strDestination, const char *strSource )
    读到/0的时候自然会返回
      

  4.   

    var
      buf: array of Byte;
      dw: DWORD;
    begin
      CopyMemory(@dw, @buf, SizeOf(DWORD));
    end;
      

  5.   

    处理为string的话,你还要必须知道字符编码,Ansi? Unicode?...
      

  6.   


    var word1:word;
    byte1,byte2:byte;
    word1:=byte1*256;
    word1:=word1+byte2;
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      A1 : array[0..1] of byte;
      B : Word;
    begin
      A1[0] := 0;
      A1[1] := 1;
      Move(A1[0],B,2);  ShowMessage(inttostr(B));
    end;
      

  8.   


    假设 buf:array[0..20] of byte;
         dw:WORD;
       
    我要取 buf中 第10 11两个byte 转成word ,
      CopyMemory(@dw, @buffer[10], SizeOf(WORD)); ?
      

  9.   


    type
      TWordByte=array[0..20] of byte;
    var
      A1 : TWordByte;
      B : Word;
    begin
      A1[0] := 0;
      A1[1] := 1;
      A1[10] := 3;
      A1[11] := 0;  Move(A1[10],B,2);
      ShowMessage(inttostr(B));
    end;
      

  10.   

    不大于8字节类型的还要call一次也太奢侈了,一个指针指过去就完了,非要复制的话就解引用指针
      

  11.   

    //是挺奢侈的!type
      TWordByte=array[0..20] of byte;
    var
      A1 : TWordByte;
      B : PWord;
    begin
      A1[0] := 0;
      A1[1] := 1;
      A1[10] := 3;
      A1[11] := 0;
      B := @A1[10];
      ShowMessage(inttostr(B^));
    end;
      

  12.   

    多谢各位大大!
    接下来是字符串的问题。。假设 buf:array[0..100] of byte; 
        str:string[32]; 要取 50-82的byte为str,该如何操作?
      

  13.   


    SetLength(str, 32);
    Move(buf[50], str[1], 32);
      

  14.   


    这样执行之后 str 还是空的。。
      

  15.   


    怎么可能?
    var
      buf: array[0..100] of byte;
      str: string[32];
      i  : Integer;
    begin
      for i := 50 to 81 do buf[i] := ord('A') + i - 50;
      SetLength(str, 32);
      Move(buf[50], str[1], 32);
      ShowMessage (str);
    end;
      

  16.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      A : array[0..100] of byte;
      b : Word;
      C : AnsiString;
    begin
      A[31] := 65;
      a[32] := 0;   PByteArray(@B)^[0] := a[31];
       PByteArray(@B)^[1] := a[32];   ShowMessage(inttostr(B));  setLength(C,3);
      move(A[31],C[1],2);
      SHowMessage(C);end;一次性讓你清醒,看WORD值是多少,STR顯示是什麼?? 然後想想 ASCII 65  對應的符合是多少?? 秀峰的方式肯定是對的。只是你想要的是  inttostr後的效果。
      

  17.   

    严重BS楼主!
    ByteArray与Word、Integer类型都有例子了,String与ByteArray就不会了~
    String与其它类型的区别仅在于第1位放长度,第2位放实际数据!
      

  18.   

    问题解决了,原因是我取的buffer位置有误,str首位是0.。。、
    说来惭愧,delphi已经用了有一个月了,但是最基础的还没掌握,老问些无语的问题。。
    最后请教下,一直想找本delphi方面经典的书(像C++方面Primer这样的),麻烦各位大大推荐一本,小弟翘首以盼!