首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vlang -将int、u32、u64、f32、f64等以LittleEndian格式转换为字节数组。

Vlang -将int、u32、u64、f32、f64等以LittleEndian格式转换为字节数组。
EN

Stack Overflow用户
提问于 2022-04-10 19:41:13
回答 1查看 336关注 0票数 0

我有各种不同数值数据类型的变量(intu32u64f32f64等),并希望将它们转换为一个字节数组。

例如:

代码语言:javascript
复制
a := 120  // int datatype
a_bytes = some_function(a)  // What to do here?

println(a_bytes)
// [ x, `\0`, `\0`, `\0`]   should be the output in little endian format
// OR b'x\x00\x00\x00' as a binary string

在python中,可以这样做:这里这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-18 04:46:06

这可以使用encoding.binary来完成,正如@Adam Oates在注释中提到的那样。

下面的示例用于64位数据.类似的功能也适用于32位和大端.

为了将f64转换为/从字节(u8),我们可以使用math.f64_bitsmath.f64_from_bits,后者将浮点数转换为IEEE754二进制表示形式(u64),后者后来被转换为字节。

代码语言:javascript
复制
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, `\0`, `\0`, `\0`, `\0`, `\0`, `\0`]
[{, 0x14, 0xae, G, a, M, 0x93, 0xc0]
-120
1234
-1235.345
*/

在撰写本文时,V还没有得到一个合适的版本。因此,语法、功能等都会发生变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71819981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档