日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【delphi】Byte数组与String类型的转换

發布時間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【delphi】Byte数组与String类型的转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

string

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

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

string[n]

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

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

?

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

字節數組轉string

  把buf內容賦給ShortString

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個功能

  1. 對Short?string類型進行設置長度(專門針對其第1位進行設置)
  2. 對動態數組進行設置

  把buf內容賦給AnsiString?

  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;  

轉載于:https://www.cnblogs.com/lcw/p/3352864.html

總結

以上是生活随笔為你收集整理的【delphi】Byte数组与String类型的转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。