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的內容會改變,所以輸出時需要將動態數組轉換成動態數組輸出。
串口通訊實例,下次有時間補上。