Byte,TBytes,array of Byte, array[0..9] of byte的區別


Byte前面已經說是存放bit的單元,是電腦內存的基本單位,byte表示0-255中的256個數字

下面為Byte的用法:

var
  B: Byte;    // 表示0-255的數字
begin
  B := 1;
  Log(B.ToString());  //1

  B := 255;
  Log(B.ToString());  //255
end;

 下面將Char轉換成Byte:

var
  C: Char;  // char 表示字符任意字符
begin
  C := '1';
  Log(C);                   // 1
  Log(SizeOf(C).ToString()); //2  一個Char占兩個Byte
  Log(Byte(C).ToString());  // 49 Byte強制轉換 將Chr轉換成Byte 這里1的字符用Ascii表示49
  // 那怎么原樣輸出呢
  Log(StringOf(BytesOf(C)));  //1  這樣將chr轉換成Byte,然后再講Byte轉換成string才是原樣

  C := '我';
  Log(C);                   // 我
  Log(SizeOf(C).ToString()); //2
  Log(Byte(C).ToString());  // 17,為嘛是17呢?    看下面 一個字節無法存放一個中文字符
  Log(StringOf(BytesOf(C)));  // 我,這里C占兩個字節,為TBytes,所以不能直接用Byte強制轉換,Byte強制轉換只能轉一個字節    
end;

 TBytes跟array of byte 一樣,即為動態數組,使用時需要SetLength(a, n),

下面為TBytes和array[0..9] of byte的區別:

var
  a: TBytes;   // array of Byte
  b: array[0..9] of byte;
  s: string;
  i: integer;
begin
  s := '12345';
  SetLength(a, s.Length);     // 動態數組
  for I := 0 to s.Length-1 do
  begin
    a[i] := Byte(s[i+1]);
    Log(a[i].ToString());  //49 50 51 52 53
  end;

  for I := 0 to s.Length-1 do    // 靜態數組
  begin
    b[i] := Byte(s[i+1]);
    Log(b[i].ToString());  //49 50 51 52 53
  end;
end;

 雖然說效果上是一樣的,但這里提醒一下,要用到串口通訊的時候,這兩種數組在底層實現方法和尋址都是有區別的,但長度還是一樣,

不影響平常的使用,在串口通訊中,是用到靜態數組,用動態數組時,inbuff的內容會改變,所以輸出時需要將動態數組轉換成動態數組輸出。

串口通訊實例,下次有時間補上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM