字符串强制转换后,D lang记录分隔符丢失

时间:2015-02-04 07:25:17

标签: casting gzip d

我正在打开一个.gz文件并通过chunk读取它来解压缩它。

未压缩文件中的数据如下: aRSbRScRSd,每条记录之间都有记录分隔符(ASCII码30)(我的虚拟示例a,b,c中的记录)。

    File file = File(mylog.gz, "r");
    auto uc = new UnCompress();
    foreach (ubyte[] curChunk; file.byChunk(4096*1024))  
    { 
        auto uncompressed = cast(string)uc.uncompress(curChunk);
        writeln(uncompressed);
        auto stringRange = uncompressed.splitLines();
        foreach (string line; stringRange)
        {
            ***************** Do something with line 

上面代码的结果是: abcd遗憾的是记录分隔符(ASCII 30)丢失了。

通过检查数据记录,我意识到在将ubyte []转换为字符串后,分隔符丢失了。

现在我有两个问题:

  • 我应该在代码中更改什么来保留记录分隔符?

  • 如何在没有for循环的情况下编写上面的代码?我想逐行阅读。

修改

第一个问题的更通用且易于理解的代码:

    ubyte[] temp = [ 65, 30, 66, 30, 67];
    writeln(temp);
    string tempStr = cast(string) temp;
    writeln (tempStr);

结果是:不需要的ABC。

1 个答案:

答案 0 :(得分:2)

尽管某些编辑可能会在其位置显示符号,但字符30不是可打印字符。它不会丢失,但它不会打印出来。 另请注意,将ubyte[]转换为string通常是不正确的,因为ubyte[]数组是可变的而string是不可变的。最好将ubyte[]投射到char[]