WYSIWYG字符串转义键表示

时间:2017-03-14 09:50:04

标签: string escaping d wysiwyg

我已经在D中编写了一个基本的十六进制转储程序。我的程序按照我的预期工作,基于测试文件,但是一个关键的格式化功能并没有通过单元测试我没有写给它。

由于格式化输出完全符合我的预期,我得出结论,我的unittest并没有完全表达我想要的内容。

string getOutput(ubyte[] bin) {
    char[] hex =cast(char[]) ("\t\t0\t1\t2\t3\t4\t5\t6\t7\n");
    for(int line; 8 * line < bin.length; line++) {
        if (8 * line + 8 >= bin.length) {
            hex ~= format("%0#0 10x%(\t%1 0 2x%)\n", line*8, bin[8*line..bin.length]);
        }
        else {
            hex ~= format("%0#0 10x%(\t%1 0 2x%)\n", line*8, bin[8*line..8*line + 8]);
        }
    }
    return cast(string) hex;
}

///Example of getOutput()
unittest {
    ubyte[9] a = [0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87, 0x78];
    string b = getOutput(a);
    write(b);
    assert(b == 
r"           0   1   2   3   4   5   5   7
0000000000  f0  e1  d2  c3  b4  a5  96  87
0000000008  78
");
}

我在单元测试中包含了write(b)来手动检查内容。从我的控制台复制粘贴,b是:

                0       1       2       3       4       5       6       7
0000000000      f0      e1      d2      c3      b4      a5      96      87
0x00000008      78

我花了几个小时阅读D词汇文档中的字符串,但我无法理解我的问题,因此我把它丢给你,希望我不会遗漏某些东西太明显了。

非常感谢。

0 个答案:

没有答案