Vlang - 将 int、u32、u64、f32、f64 等转换为 LittleEndian 格式的字节数组
Vlang - convert int, u32, u64, f32, f64, etc. to array of bytes in LittleEndian format
我有各种不同数值数据类型的变量(int
、u32
、u64
、f32
、f64
等)并想转换他们到一个字节数组。
例如:
a := 120 // int datatype
a_bytes = some_function(a) // What to do here?
println(a_bytes)
// [ x, `[=10=]`, `[=10=]`, `[=10=]`] should be the output in little endian format
// OR b'x\x00\x00\x00' as a binary string
在 python 中,可以按照这些帖子中所示的方式完成:here and
这可以在评论中使用 encoding.binary as mentioned by @Adam Oates 来完成。
以下示例针对64位数据。类似的功能也可用于 32 位和 big-endian。
要转换 f64
to/from 字节 (u8
) 我们可以使用 math.f64_bits
and math.f64_from_bits
将浮点数转换为 IEEE 754 二进制表示形式 (u64
)稍后转换为字节。
import encoding.binary
import math
fn convert_u64_to_bytes(u u64) []u8 {
mut b := []u8{len: 8, init: 0}
binary.little_endian_put_u64(mut b, u)
return b
}
fn convert_f64_to_bytes(val f64) []u8 {
u := math.f64_bits(val) // returns IEEE 754 binary representation of f64
return convert_u64_to_bytes(u)
}
fn convert_bytes_to_u64(b []u8) u64 {
return binary.little_endian_u64(b)
}
fn convert_bytes_to_f64(b []u8) f64 {
u := binary.little_endian_u64(b)
return math.f64_from_bits(u)
}
fn main(){
i := i64(-120)
u := u64(1234)
f := f64(-1235.345)
bi := convert_u64_to_bytes(u64(i))
bu := convert_u64_to_bytes(u)
bf := convert_f64_to_bytes(f)
println('$bi\n$bu\n$bf')
i1 := i64(convert_bytes_to_u64(bi))
u1 := convert_bytes_to_u64(bu)
f1 := convert_bytes_to_f64(bf)
println('$i1\n$u1\n$f1')
}
/* OUTPUT
[0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]
[0xd2, 0x04, `[=10=]`, `[=10=]`, `[=10=]`, `[=10=]`, `[=10=]`, `[=10=]`]
[{, 0x14, 0xae, G, a, M, 0x93, 0xc0]
-120
1234
-1235.345
*/
At the time of writing this article, V is yet to get a proper release. So the syntax, functions, etc. are subject to changes.
我有各种不同数值数据类型的变量(int
、u32
、u64
、f32
、f64
等)并想转换他们到一个字节数组。
例如:
a := 120 // int datatype
a_bytes = some_function(a) // What to do here?
println(a_bytes)
// [ x, `[=10=]`, `[=10=]`, `[=10=]`] should be the output in little endian format
// OR b'x\x00\x00\x00' as a binary string
在 python 中,可以按照这些帖子中所示的方式完成:here and
这可以在评论中使用 encoding.binary as mentioned by @Adam Oates 来完成。
以下示例针对64位数据。类似的功能也可用于 32 位和 big-endian。
要转换 f64
to/from 字节 (u8
) 我们可以使用 math.f64_bits
and math.f64_from_bits
将浮点数转换为 IEEE 754 二进制表示形式 (u64
)稍后转换为字节。
import encoding.binary
import math
fn convert_u64_to_bytes(u u64) []u8 {
mut b := []u8{len: 8, init: 0}
binary.little_endian_put_u64(mut b, u)
return b
}
fn convert_f64_to_bytes(val f64) []u8 {
u := math.f64_bits(val) // returns IEEE 754 binary representation of f64
return convert_u64_to_bytes(u)
}
fn convert_bytes_to_u64(b []u8) u64 {
return binary.little_endian_u64(b)
}
fn convert_bytes_to_f64(b []u8) f64 {
u := binary.little_endian_u64(b)
return math.f64_from_bits(u)
}
fn main(){
i := i64(-120)
u := u64(1234)
f := f64(-1235.345)
bi := convert_u64_to_bytes(u64(i))
bu := convert_u64_to_bytes(u)
bf := convert_f64_to_bytes(f)
println('$bi\n$bu\n$bf')
i1 := i64(convert_bytes_to_u64(bi))
u1 := convert_bytes_to_u64(bu)
f1 := convert_bytes_to_f64(bf)
println('$i1\n$u1\n$f1')
}
/* OUTPUT
[0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]
[0xd2, 0x04, `[=10=]`, `[=10=]`, `[=10=]`, `[=10=]`, `[=10=]`, `[=10=]`]
[{, 0x14, 0xae, G, a, M, 0x93, 0xc0]
-120
1234
-1235.345
*/
At the time of writing this article, V is yet to get a proper release. So the syntax, functions, etc. are subject to changes.