我今天刚开始学习 D,我真的需要像这样读写数据:
byte[] bytes = ...;
ByteBuffer buf = new ByteBuffer(bytes);
int a = buf.getInt();
byte b = buf.getByte();
short s = buf.getShort();
buf.putInt(200000);
D 中是否有内置的东西可以实现此目的,还是我必须自己制作?
最佳答案
我建议查看 std.bitmanip 的 read
, peek
, write
和 append
功能。例如
ubyte[] buffer = [1, 5, 22, 9, 44, 255, 8];
auto range = buffer; // if you don't want to mutate the original
assert(range.read!ushort() == 261);
assert(range == [22, 9, 44, 255, 8]);
assert(range.read!uint() == 369_700_095);
assert(range == [8]);
assert(range.read!ubyte() == 8);
assert(range.empty);
assert(buffer == [1, 5, 22, 9, 44, 255, 8]);
没有缓冲区类型 - 相反,它们是在 ubyte
范围(包括 ubyte[]
)上运行的自由函数 - 因此它们的工作方式可能不完全相同您正在寻找什么,但它们是为您需要从数组或其他类型的字节范围中提取整数值的情况而设计的。如果您确实想要某种单独的缓冲区类型,那么您应该能够相当轻松地创建一个在内部使用它们的缓冲区类型。
关于arrays - D - 是否有用于读取和写入字节的字节缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35881580/