我已经在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词汇文档中的字符串,但我无法理解我的问题,因此我把它丢给你,希望我不会遗漏某些东西太明显了。
非常感谢。