Delphi 10:SizeOf(string) 的问题 - Windows vs Android
Delphi 10: Problems with SizeOf(string) - Windows vs Android
我想使用 Indy IdTCPClient 和 IdTCPServer 将 TMemoStream 从 Android 发送到 Windows。
问题是这样的:
SizeOf(string) in Android is 4 bytes
SizeOf(string) in Windows 10 is 8 bytes
在android中我使用了这段代码:
type TMyRecord = record
x1: string;
x2: string;
end;
var
workRecord: TMyRecord;
rInfo: TMemoryStream;
begin
workRecord.x1:= 'Hello';
workRecord.x2:= 'How are you';
rInfo:= TMemoryStream.Create;
try
rInfo.Write(workRecord, SizeOf(workRecord)); //Size of workRecord is 8 bytes
AndroidTCPClient.IOHandler.Write(workRecord, 0, False);
finally
rInfo.Free;
end;
end;
在Windows10中我使用了这个代码:
type TMyRecord = record
x1: string;
x2: string;
end;
type TMyRecord = record
x1: string;
x2: string;
end;
var
workRecord: TMyRecord;
rInfo: TMemoryStream;
begin
rInfo:= TMemoryStream.Create;
try
AContext.Connection.IOHandler.ReadStream(rInfo, SizeOf(workRecord), False);
rInfo.Position:= 0;
rInfo.Read(workRecord, SizeOf(workRecord)); //Size of workRecord is 16 bytes
finally
rInfo.Free;
end;
end;
谁能告诉我如何设置从Android到Windows的传输字符串?
sizeof(string)
是一个指针的大小。您的 Windows 程序显然是为 64 位编译的,因此指针为 8 字节宽。您的 Android 程序以 32 位为目标,指针为 4 字节宽。
更大的问题是您不能期望将指针从一个进程发送到另一个进程。指针指向发送程序中的内存。它们对接收者没有意义。您可能应该序列化您的数据,例如 JSON,然后发送它。然后收件人可以在收到后反序列化。
我想使用 Indy IdTCPClient 和 IdTCPServer 将 TMemoStream 从 Android 发送到 Windows。
问题是这样的:
SizeOf(string) in Android is 4 bytes
SizeOf(string) in Windows 10 is 8 bytes
在android中我使用了这段代码:
type TMyRecord = record
x1: string;
x2: string;
end;
var
workRecord: TMyRecord;
rInfo: TMemoryStream;
begin
workRecord.x1:= 'Hello';
workRecord.x2:= 'How are you';
rInfo:= TMemoryStream.Create;
try
rInfo.Write(workRecord, SizeOf(workRecord)); //Size of workRecord is 8 bytes
AndroidTCPClient.IOHandler.Write(workRecord, 0, False);
finally
rInfo.Free;
end;
end;
在Windows10中我使用了这个代码:
type TMyRecord = record
x1: string;
x2: string;
end;
type TMyRecord = record
x1: string;
x2: string;
end;
var
workRecord: TMyRecord;
rInfo: TMemoryStream;
begin
rInfo:= TMemoryStream.Create;
try
AContext.Connection.IOHandler.ReadStream(rInfo, SizeOf(workRecord), False);
rInfo.Position:= 0;
rInfo.Read(workRecord, SizeOf(workRecord)); //Size of workRecord is 16 bytes
finally
rInfo.Free;
end;
end;
谁能告诉我如何设置从Android到Windows的传输字符串?
sizeof(string)
是一个指针的大小。您的 Windows 程序显然是为 64 位编译的,因此指针为 8 字节宽。您的 Android 程序以 32 位为目标,指针为 4 字节宽。
更大的问题是您不能期望将指针从一个进程发送到另一个进程。指针指向发送程序中的内存。它们对接收者没有意义。您可能应该序列化您的数据,例如 JSON,然后发送它。然后收件人可以在收到后反序列化。