我有一個TBytes
數組,我想像DWORD
數組那樣訪問它,但我不想創建TBytes
數組的新副本。我試圖對它進行類型轉換,但新變量的長度與舊的長度相同,而不是Length(TBytes)/4
,因爲它應該是這樣。如果我想設置正確的長度,Delphi會複製它並且兩個數組之間的連接丟失。有可能使它工作?如何從TBytes數組訪問DWORD?
0
A
回答
3
您需要獲取指向數組數據的指針,然後對其進行類型轉換。只需對指針進行類型轉換不會改變您仍然指向一個字節數組的事實,這就是爲什麼長度相同。你必須通過4
除以數組長度手動計算的DWORD
S上的號碼試試這個:
var
bytes: TBytes;
values, value: LPDWORD;
i, numValues: Integer;
begin
// populate bytes as needed...
values := LPDWORD(bytes);
value := values;
numValues := Length(bytes) div sizeof(DWORD);
for I := 0 to numValues-1 do
begin
// use value^ as needed...
Inc(value);
end;
end;
或者,如果您使用的是德爾福2009+:
{$POINTERMATH ON}
var
bytes: TBytes;
values: LPDWORD;
i, numValues: Integer;
begin
// populate bytes as needed...
values := LPDWORD(bytes);
numValues := Length(bytes) div sizeof(DWORD);
for I := 0 to numValues-1 do
begin
// use values[i] as needed...
end;
end;
+0
謝謝。它的工作原理很好,但是如果我們增加字節數組的大小,我們必須小心,因爲數組重新定位在新地址處,所以要再次更新指針。無論如何,沒關係。 –
相關問題
- 1. 如何從多線程訪問數組?
- 2. 如何從AngularJS模板訪問數組
- 3. 如何從tempdata訪問數組元素
- 4. 如何從對象內訪問數組?
- 5. 如何訪問Javascript數組
- 6. handlebars:如何訪問數組?
- 7. 如何訪問數組?
- 8. 如何訪問此數組?
- 9. 如何訪問數組中的數組?
- 10. 如何訪問數組中的數組
- 11. 如何使用angularjs從json數組訪問數組?
- 12. 從JavaScript訪問PHP數組
- 13. 從索引訪問數組
- 14. 從任何地方訪問數組
- 15. 如何直接從組件中訪問Vue的路由數組?
- 16. 如何將TBytes轉換爲RawByteString?
- 17. 如何從regexp.ReplaceAllFunc訪問捕獲組?
- 18. 如何從組件中訪問「根」ViewContainerRef
- 19. 如何從子組件訪問angular2
- 20. 如何從用戶訪問組子類?
- 21. 如何從組件訪問RouterConfig(Angular2 RC4)
- 22. 如何從AJAX訪問多維關聯json數組jquery函數
- 23. 如何從我的表格數據源訪問我的數組?
- 24. 如何使用成員函數從main()訪問數組?
- 25. 訪問數組
- 26. 訪問數組
- 27. 如何從long轉換爲two-complement,delphi中的big-endian Tbytes
- 28. PHP:從函數訪問二維數組
- 29. 從onclick函數訪問javascript數組
- 30. 使用Swiftyjson從數組訪問數據
使用PDWORD類型的指針變量,然後'p:= @arr [0];'將前四個字節作爲雙字讀取。 Inc(p)'指向接下來的4個字節。 –
聲明類型'TDWords = DWord數組;'然後使用'絕對'指令:'var MyBytesArray:TBytes; MyDWordsArray:TDWords絕對MyBytesArray;' – Abelisto
@Abelisto:以這種方式使用'absolute'將會讓你訪問'DWORD'的值,但'Length(MyDWordsArray)'不會返回正確數目的'DWORD',它將返回'Length(MyBytesArray)'而不是。 –