【delphi】Byte數組與String類型的轉換

【delphi】Byte數組與String類型的轉換

string

  string = AnsiString = 長字符串,理論上長度不受限制,但其實受限於最大尋址範圍2的32次方=4G字節;html

  變量Str名字是一個指針,指向位於堆內存的字符序列,字符序列起始於@Str[1],@Str[1]偏移負16個字節的空間存儲着字串長度、引用計數等信息。字符序列以NULL結束。數組

string[n]

  string[n] = ShortString = 短字符串,最多容納255個字符,實際長度是字符長度+1,是Delphi的簡單類型;ide

  Str[0]存儲着字符的個數,第一個字符從Str[1]開始存放,不以NULL結束。post

 

  只要理解這一理論,轉string應該就不成問題了!測試

字節數組轉string

  把buf內容賦給ShortStringui

複製代碼

var  
  buf: array[0..100] of byte;  
  str: string[32];//僅僅開闢了一個32個空間的內存,因爲第1位沒有用setlength初始化,致使長度不定  
  i  : Integer;  
begin  
 //若是在此處就對str進行賦值,str[0]位就有計數了,若是在使用以前沒有對其進行使用,用SetLength進行賦值  
  for i := 50 to 81 do buf[i] := ord('A') + i -50;//測試數據  
  SetLength(str, 32);//設置str[0]=32;  
  Move(buf[50], str[1], 32);//內存複製  
  ShowMessage (str);  
end;

複製代碼

  在這裏從新認識一下SetLength,SetLength有2個功能url

  1. 對Short string類型進行設置長度(專門針對其第1位進行設置)spa

  2. 對動態數組進行設置指針

  把buf內容賦給AnsiString code

  stringstring[]不同,string是一個動態數組,尚未分配空間,而string[]已經預分配了空間,只不過str[0]處沒賦初值,這時若是用Move的話會把Byte數組中的數據拷貝到string空間中,而string這時尚未分配內存,確定會形成AV錯誤) 

複製代碼

var  
  buf: array[0..100] of byte;  
  str: string;  
  i  : Integer;  
begin  
  for i := 50 to 81 do buf[i] := ord('A') + i -50;  
  SetLength(str, 32);  
  Move(buf[50], str[1], 32);//注意,這裏是從str[1]開始複製的  
  ShowMessage (str);  
end;

複製代碼

string轉爲字節數組

複製代碼

var  
  buf: array[0..100] of byte;  
  str: string;  
  
begin  
  str:='abcdefg';  
  Move( str[1],buf[0], 32);//注意,這裏是從str[1]開始複製的  
  ShowMessageFmt('$%.2d, $%.2d, $%.2d, $%.2d', [buf[3], buf[2], buf[1], buf[0]]);  
  
end;

複製代碼

QQ聯繫方式:lcw@v.gg歡迎聯繫十狼

出處:lcw.cnblogs.com

郵箱:wwwlllll@126.com

本文申明:本文版權歸做者和博客園共有,歡迎轉載,轉載請註明出處.

相關文章
相關標籤/搜索