Par*_*bay 7 d type-conversion endianness
我有一个字节(我知道这是一个保存为小端的整数),我想将它们转换为整数.
当我有一个静态大小的数组时没问题,但现在我有一个slice(ubyte[]).
是否仍然可以将其转换为整数,例如以这种方式?
ubyte[] bytes = ...;
uint native = littleEndianSliceToNative!uint(bytes);
Run Code Online (Sandbox Code Playgroud)
进一步研究亚当所写的内容,你可以编写一个简单的函数
T sliceToNative(T)(ubyte[] slice) if(isNumeric!T) {
const uint s = T.sizeof,
l = min(cast(uint)s, slice.length);
ubyte[s] padded;
padded[0 .. l] = slice[0 .. l];
return littleEndianToNative!T(padded);
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以littleEndianToNative创建泛型类型,以便镜像切片上的所有数组操作.
只需将切片明确切片到适当的大小:
import std.bitmanip;
void main() {
ushort i = 12345;
ubyte[2] swappedI = nativeToLittleEndian(i);
ubyte[] slice = swappedI;
alias Target = ushort; // make this a template param for a generic function
assert(i == littleEndianToNative!Target(slice[0..Target.sizeof])); // the [0..Target.sizeof]
}
Run Code Online (Sandbox Code Playgroud)
这应该适用于任何需要的尺寸.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |