gpt4 book ai didi

delphi - Delphi中的字节值数组

转载 作者:行者123 更新时间:2023-12-03 18:58:23 27 4
gpt4 key购买 nike

您好,我正在研究互联网代码,并引起了我的注意:

// ~ Your Dll Here ~ Ex : 'C:\MS10046.dll'
SizeNameDll : integer = 28;
Dllx : ARRAY [1..28] OF Byte = ($00,$43,$00,$3A,$00,$5C,$00,$4D,$00,$53,$00,$31,$00,$30,$00,$30,$00,$34,$00,$36,$00,$2E,$00,$64,$00 ,$6C,$00,$6C);


假设数组的内容的值为“ C:\ MS10046.dll”,我不明白两件事,为什么SizeNameDll的值为28,而不是“ C:\ MS10046.dll”的确切长度?我如何通过“ c:/xampp/test.dll”之类的其他途径将“ C:\ MS10046.dll”的值更改为所有代码?

有人可以帮我吗?

最佳答案

字节代表大尾数UTF-16 Unicode中的文本'C:\MS10046.dll'。在UTF-16中,“字符”(或正确称为:代码点)由16位宽的代码单元组成,或者在Delphi中为WideChar。因此,每个代码单元的大小为两个字节。在little-endian(基于Intel的平台的默认设置)中,这意味着'C'编码为$0043,即字节$43,后跟字节$00。在big-endian中,这是相反的,因此'C'(或$0043)是$00,后跟$43':'相同:在小端字节序中为$3A,$00,在大端字节序中为$00,$3A。因此,您显示的数组中有14个“字符”。

由于数组似乎以$00开头,因此必须为big-endian。

如果您必须使用的函数需要一个字节数组和一个长度数组,那么您可能应该这样调用它:

var
Dllx: TBytes;
str: string;
begin
str := 'c:\xampp\test.dll'; // I removed the spaces - they are wrong
Dllx := TEncoding.BigEndianUnicode.GetBytes(str);
if Length(Dllx) > 0 then
YourFunction(... PByte(Dllx), Length(Dllx), ...);


如果您演示了应该如何使用该数组,那么IOW,还可以显示更多代码。 Windows上的DLL需要使用大端编码是非常不寻常的。

很有可能,如果根本不需要big-endian,则可以不进行转换:

if Length(str) > 0 then
YourFunction(..., PChar(str), Length(str) * Sizeof(WideChar), ...);


甚至(这完全取决于函数的声明):

if Length(str) > 0 then
YourFunction(..., PChar(str), Length(str), ...);


后者的可能性更大,但是如果没有更多信息,这全是猜测,抱歉。

关于delphi - Delphi中的字节值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com