编码结果不起作用
Encodeing results are not working
我有一个用 Delphi 4 编写的程序,并试图将其转换为 delphi xe10。我不明白的一部分是这个。
Cmd[0] := 2; // Number of equipment to talk to
Cmd[1] := 22; // My device address
Cmd[2] := 0;
MResults.Lines.Add('Reciving...');
Refresh();
Srlen := High(RecBuff);
Ret := GpListen(@Cmd, @Srlen, @RecBuff); // gets returned value
if CheckRet('GpListen', (Ret and $FF), csBuf) = 0 then
begin
RecBuff[Srlen] := Chr(0); // ??
MResults.Lines.Add(RecBuff); // returned
//csBuf := Format('????', [Srlen]); ////?some error??
end;
问题是 RecBuff (RecBuff:array[0..9999] of Char;) 它以 #0 开始,像这样:
但一旦
Ret := gpListen(@cmd, @srlen, @recbuff);
是运行 recbuff 现在看起来像这样:
很多日本字符。我如何才能将其正确编码到记事本上。
尝试改变
RecBuff:array[0..9999] of Char;
至
RecBuff:array[0..9999] of AnsiChar;
看看它是否有效。这可能会提示代码中其他地方的一些更改。
在 Delphi 10 中,"Char" 是一个 2 字节的实体(16 位字符,UniCode),而不是 Delphi 4,它是一个 1 字节的实体(8 位字符,ANSI)。两种编译器的通用格式都是"AnsiChar",这是一个8位字符。
您可能还会遇到 STRING 变量的问题,这些变量现在填充的是 16 位字符而不是 8 位字符。
另请阅读 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),然后再进行进一步的转换。
在西雅图,字符串和字符默认为 Unicode。
与设备的交换通常通过 Ansi 字符(一字节)缓冲区进行。
所以使用 AnsiString、AnsiChar、PAnsiChar 等
RecBuff:array[0..9999] of AnsiChar;
我们已经讨论过这个问题
我有一个用 Delphi 4 编写的程序,并试图将其转换为 delphi xe10。我不明白的一部分是这个。
Cmd[0] := 2; // Number of equipment to talk to
Cmd[1] := 22; // My device address
Cmd[2] := 0;
MResults.Lines.Add('Reciving...');
Refresh();
Srlen := High(RecBuff);
Ret := GpListen(@Cmd, @Srlen, @RecBuff); // gets returned value
if CheckRet('GpListen', (Ret and $FF), csBuf) = 0 then
begin
RecBuff[Srlen] := Chr(0); // ??
MResults.Lines.Add(RecBuff); // returned
//csBuf := Format('????', [Srlen]); ////?some error??
end;
问题是 RecBuff (RecBuff:array[0..9999] of Char;) 它以 #0 开始,像这样:
但一旦
Ret := gpListen(@cmd, @srlen, @recbuff);
是运行 recbuff 现在看起来像这样:
尝试改变
RecBuff:array[0..9999] of Char;
至
RecBuff:array[0..9999] of AnsiChar;
看看它是否有效。这可能会提示代码中其他地方的一些更改。
在 Delphi 10 中,"Char" 是一个 2 字节的实体(16 位字符,UniCode),而不是 Delphi 4,它是一个 1 字节的实体(8 位字符,ANSI)。两种编译器的通用格式都是"AnsiChar",这是一个8位字符。
您可能还会遇到 STRING 变量的问题,这些变量现在填充的是 16 位字符而不是 8 位字符。
另请阅读 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),然后再进行进一步的转换。
在西雅图,字符串和字符默认为 Unicode。
与设备的交换通常通过 Ansi 字符(一字节)缓冲区进行。
所以使用 AnsiString、AnsiChar、PAnsiChar 等
RecBuff:array[0..9999] of AnsiChar;
我们已经讨论过这个问题