在 Zig 中进行铸造(例如使用 i32 等)

问题描述 投票:0回答:1

与其他比 asm 级别更高的语言(如 Java)一样,我想转换值、比较它等等。

例如像这样填充数组:

    var array: [10]i32 = undefined;

    for (0..array.len) |i|
        array[i] = i;

但是编译器说:

C:\Zig\projects\test\src>zig run main.zig
main.zig:7:20: error: expected type 'i32', found 'usize'
        array[i] = i;
                   ^
main.zig:7:20: note: signed 32-bit int cannot represent all possible unsigned 64-bit values
referenced by:
    callMain: C:\Zig\lib\std\start.zig:585:32
    initEventLoopAndCallMain: C:\Zig\lib\std\start.zig:519:34
    remaining reference traces hidden; use '-freference-trace' to see all reference traces

我不知道如何解决这个问题,因为之前所有的方法都不起作用。我还需要 u32 到 i32、f32 到 i32 等等。请帮助我

casting zig
1个回答
0
投票

您需要使用

@intCast
显式地将数字转换为较小的类型。

var array: [10]i32 = undefined;

for (0..array.len) |i|
    array[i] = @intCast(i);

请记住,如果您使用

@intCast
并且数字不适合较小的类型,它将触发未定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.