d切片长度
class iv{
private byte[] buffer;
private ulong writePos;
private ulong readPos;
this(){}
void write(T)(T value) if (is(T == uint)){
buffer ~= nativeToLittleEndian!uint(value);
writePos += uint.sizeof;
}
uint readUint()
{
assert(readPos == 0);
uint value = littleEndianToNative!uint(cast(ubyte[uint.sizeof])buffer[readPos..readPos+uint.sizeof]);
//littleEndianToNative!uint(cast(ubyte[uint.sizeof])buffer[readPos..$][0..uint.sizeof]);
readPos += uint.sizeof;
return value;
}
uint readUint_test()
{
assert(readPos == 0);
uint value = littleEndianToNative!uint(cast(ubyte[uint.sizeof])buffer[0..0+uint.sizeof]);
readPos += uint.sizeof;
return value;
}
}
void main()
{
auto cc = new iv();
uint ptr = 1000000;
cc.write(ptr);
writeln(cc.readUint()); //不工作
writeln(cc.readUint_test()); //工作
}
编译器目前不能确定readPos..readPos+4长度为4,所以它不像静态数组类型的转换.可以这样:
littleEndianToNative!uint(cast(ubyte[uint.sizeof])buffer[readPos..$][0..uint.sizeof]);
浙公网安备 33010602011771号