我想使用 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;
在 Windows 10 中我使用了以下代码:
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,然后发送。然后接收者可以在收到后反序列化。
关于android - 德尔福10 : Problems with SizeOf(string) - Windows vs Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36059205/