【delphi】Byte数组与String类型的转换
生活随笔
收集整理的這篇文章主要介紹了
【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個功能:
- 對Short?string類型進行設置長度(專門針對其第1位進行設置)
- 對動態數組進行設置
把buf內容賦給AnsiString?
string與string[]不一樣,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类型的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英文电影3个字,啥啥屋
- 下一篇: 火狐拓展开发 基础知识