编码结果不起作用

时间:2016-02-08 05:54:45

标签: delphi delphi-10-seattle

我有一个用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:Char的数组[0..9999];)它开始时充满了#0,如下所示:

enter image description here

但是一旦

Ret := gpListen(@cmd, @srlen, @recbuff); 

运行recbuff现在看起来像这样:

enter image description here 很多日本炭。我如何才能正确编码到memopad上。

2 个答案:

答案 0 :(得分:3)

尝试更改

$scope.ILBasicInfoDTO.PYROrNonResidencyStateInfo.TaxpayerEarnedIncomeFromOtherState.StateId

RecBuff:array[0..9999] of Char;

看看它是否有效。这可能会提示代码中其他位置的某些更改。

在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!)

答案 1 :(得分:1)

在西雅图,字符串和字符默认为Unicode。

与设备的交换通常通过Ansi字符(单字节)缓冲区进行。

所以使用AnsiString,AnsiChar,PAnsiChar等

RecBuff: Ansi Char的数组[0..9999];

我们已经讨论过这个问题here