将切片转换为数组

Converting a slice to an array

我有一个切片,我保证(在运行时)它的长度至少为 8。我想将该切片转换为一个数组,因为我需要使用 std.mem.bytesAsValue() 来创建一个 f64 来自原始字节(对于上下文,我正在实现二进制序列化格式)。

我是这样解决的,但我想知道是否有更好的语法来实现相同的目标:

    var array: [8]u8 = undefined;
    array[0] = slice[0];
    array[1] = slice[1];
    array[2] = slice[2];
    array[3] = slice[3];
    array[4] = slice[4];
    array[5] = slice[5];
    array[6] = slice[6];
    array[7] = slice[7];

你可以通过 std.mem.copy

var array = slice[0..8].*;

或使用std.mem.copy

std.mem.copy(u8, &array, slice[0..2]);

虽然我认为您只需要将 slice[0..8] 作为参数而不是创建变量

鉴于您的目标,如果对齐可行,您可以将切片指针转换为指向 f64 的指针:@ptrCast(*f64, slice.ptr)。这使您甚至不必复制任何内容,以防您根本不需要这样做。

请注意,bytesAsValues 是一个使用编译器内置函数的 stdlib 函数,如果签名不符合您的需求,您可以跳过它并直接使用内置函数,就像我上面提到的那样。不要害怕阅读 stdlib 源代码。

这是一个天赐良机 link,其中包含一些有关如何就地进行转换(通过转换指针)以及如何立即将所有内容复制为浮点数的示例:https://zig.godbolt.org/z/3Y9o5zvfe