当前位置: 首页 > 面试题库 >

将整数转换为字节数组

谷泳
2023-03-14
问题内容

我有一个接收a的函数,[]byte但是我所拥有的a是进行int此转换的最佳方法是什么?

err = a.Write([]byte(myInt))

我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。


问题答案:

我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该encoding/binary库。OP建议binary.Write()可能会有一些开销。纵观源的实施Write(),我看到它做了一些运行时的决策最大的灵活性。

func Write(w io.Writer, order ByteOrder, data interface{}) error {
    // Fast path for basic types.
    var b [8]byte
    var bs []byte$                                                              
    switch v := data.(type) {$                                                     
    case *int8:$                                                                   
        bs = b[:1]$                                                                
        b[0] = byte(*v)$                                                           
    case int8:$                                                                    
        bs = b[:1]$                                                                
        b[0] = byte(v)$                                                            
    case *uint8:$                                                                  
        bs = b[:1]$                                                                
        b[0] = *v$                                                                 
    ...

对?Write()接受一个非常通用的data第三个参数,这会带来一些开销,因为Go运行时随后被迫对类型信息进行编码。由于Write()在此处执行了一些您根本不需要的运行时决策,也许您可​​以直接调用编码函数,看看它是否更好。

像这样:

package main

import (
    "encoding/binary"
    "fmt"
)

func main() {
    bs := make([]byte, 4)
    binary.LittleEndian.PutUint32(bs, 31415926)
    fmt.Println(bs)
}

让我们知道这是如何执行的。

否则,如果您只是尝试获取整数的ASCII表示形式,则可以获取字符串表示形式(可能带有strconv.Itoa),并将该字符串转换为[]byte类型。

package main

import (
    "fmt"
    "strconv"
)

func main() {
    bs := []byte(strconv.Itoa(31415926))
    fmt.Println(bs)
}


 类似资料:
  • 问题内容: 将转换为的快速方法是什么? 例如 问题答案: 看看ByteBuffer类。 设置字节顺序保证了,,和。 或者,你可以手动执行以下操作: 该班是专为尽管这样的脏手任务。实际上,私有定义了以下辅助方法:

  • 问题内容: 我正在使用以下方式读取文件: 我在这里发现。可以转换为吗?将转换为会占用更多空间吗? 编辑:我的文件包含数百万个整数,例如, 100000000 200000000 .....(使用普通的int文件写入)。我读到字节缓冲区。现在,我想将其包装到IntBuffer数组中。怎么做 ?我不想将每个字节转换为int。 问题答案: 您已经在注释中说过,您希望输入数组中的四个字节对应于输出数组中的

  • 问题内容: 我想执行转换而不求助于某些依赖于实现的技巧。有小费吗? 问题答案: 您需要知道字节的字节序。 假设(例如@ WhiteFang34),其是一个长度为4的,然后… … 大端: 小端:

  • 问题内容: 如何将(大字节序)可变大小的二进制字节数组转换为(无符号)整数/长整数?例如,代表4404 现在,我正在使用 它虽然很小,但有点可读,但可能效率不高。有没有更好(更明显)的方法? 问题答案: 传统上,Python对于“大尾数C布局中的数字”用处不大,而对于C来说则用不了太多。(如果要处理2字节,4字节或8字节的数字,那么答案就是) 但是足够多的人厌倦了没有一种明显的方法可以做到这一点,

  • 问题内容: 我知道Java不允许无符号类型,所以我想知道它如何将整数转换为字节。假设我有一个值为255的整数a,并且将该整数转换为一个字节。该值表示在字节11111111中吗?换句话说,该值是否更多地视为带符号的8位整数,还是仅直接复制该整数的后8位? 问题答案: 这称为缩小原始转换。根据规格: 将有符号整数缩小为整数类型 T会 简单地丢弃除 n个 最低阶位以外的所有位,其中 n 是用于表示类型