你手上現在只有乙個string, 或者其他陣列型別,比如array of char. array of integer..一般的過程就是,首先把你手上的陣列型別轉換成符合a呼叫的需要的型別tbytes,,其實很多時候我們需要要這個tbytes純粹是為了得到乙個a函式執行的結果,bytes其實並沒有什麼用,只是乙個中間資料。但是有沒有想過,轉換的過程其實需要記憶體開銷的,記憶體要分配,資料要複製,最後銷毀。能不能把不同型別的陣列共享在一塊記憶體上。比如string,既可以當tbytes用,也可以當 比如array of integer. 答案是肯定的。
var abytes:tbytes; aintegers: array of integer;
貼: abytes:=pointer(aintegers);
元素大小:簡單, sizeof(byte),sizeof(ineteger);
剩下就是長度在**?
長度:
delphi的動態陣列管理有頭部。位置就在動態陣列指標的前面。頭部有什麼。。每個版本都不一樣。但是一樣的是,動態陣列的前4個位元組就是動態陣列的長度(包括字串也是如此)。
這樣就可以愉快的玩耍了。
下面列文給出了乙個字串s變成tbytes s的例子,但是a和s共享一塊記憶體。 也就是說只有的型別轉換沒有涉及到記憶體的新的分配。
functionnewtypefunction(const a: tbytes): string;
begin
system.setlength(result, system.length(a) shr 1);
system.move(a[0], result[1], length(a));
end;
procedure tform1.btn1click(sender: tobject);
vara: tbytes;
s: string;
begin
// a 和s共享乙個記憶體位址。達到型別轉換。
s := '我的agbc';
a := pointer(@s[1]); // 直接指標貼上去 ,共同指向一塊記憶體
pinteger(pbyte(a) – 4)^ := length(s) shl 1; //脫離d對tbytes的管理,修正tbytes的長度
showmessage(newtypefunction(a)); // tbytes活了。 能用。
pinteger(pbyte(a) – 4)^ := length(a) shr 1; // 恢復 s字串長度。
a := nil;// 插去屁股
end;
特別獻給老程式設計師,過去d7都是用pansichar的幹活,現在d庫很多函式需要tbytes的幹活。。**公升級。。吃一壺
經常碰到這樣的場景。
iOS中TableView的不同型別
tableview是ios開發中經常用到的view,針對不同的顯示需求,我們需要不同的cell來進行顯示,比較複雜的顯示我們一般會自定義cell的樣式,但是簡單的顯示就可以靠ios本身支援的列表型別了。ios目前支援四中列表型別,分別是 uitableviewcellstyledefault 預設型...
不同型別的檔案
cpp檔案 cpp是用c 語言編寫的源 檔案的字尾 具體實現 h檔案 h是c語言和c 語言的標頭檔案 函式宣告,巨集定義,函式原型 pde檔案 一共有4種可能,分別為 1 powerdesk encrypted file 2 pathology data exchange file 3 afp pa...
js中不同型別作比較
示例 doctype html html head meta charset utf 8 meta name viewport content width device width,initial scale 1 title title head body body script 0 和 和 和 f...