duanji9378 2014-01-05 22:23
浏览 279
已采纳

Golang:如何为结构中的字节打印f%x?

var b [88]byte
n, err := file.Read(b[:])
fmt.Printf("bytes read: %d Bytes: [% x]
", n, b)

The above prints bytes in hexdecimal

I have a struct like this

type SomeStruct struct {
   field1 []byte
   field2 []byte
}
someStructInstance := SomeStruct{[249 190 180 217], [29 1 0 0]}
fmt.Println(someStructInstance)
=> {[249 190 180 217] [29 1 0 0]}

But ideally I would like it to print hexdecimal

=> {[f9 be b4 d9] [1d 01 00 00]}

How would I go about that?

  • 写回答

2条回答 默认 最新

  • 普通网友 2014-01-06 00:41
    关注

    You could use reflection to inspect the struct and print any []bytes that it has.

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    type SomeStruct struct {
        field1 []byte
        field2 []byte
    }
    
    type OtherStruct struct {
        intValue  int
        intSlice  []int
        byteSlice []byte
    }
    
    var typeOfBytes = reflect.TypeOf([]byte(nil))
    
    func printSlicesHex(obj interface{}) {
        value := reflect.ValueOf(obj)
        typeOfObj := value.Type()
        for i := 0; i < value.NumField(); i++ {
            field := value.Field(i)
            if field.Type() == typeOfBytes {
                bytes := field.Bytes()
                printBytes(typeOfObj.Field(i).Name, bytes)
            }
        }
    }
    
    func printBytes(name string, bytes []byte) {
        fmt.Printf("%s: [% x]
    ", name, bytes)
    }
    
    func main() {
        someStructInstance := SomeStruct{[]byte{249, 190, 180, 217}, []byte{29, 1, 0, 0}}
        fmt.Println("Printing []bytes in SomeStruct")
        printSlicesHex(someStructInstance)
        fmt.Println()
    
        otherStruct := OtherStruct{0, []int{0, 1, 2}, []byte{0, 1, 2, 3}}
        fmt.Println("Printing []bytes in OtherStruct")
        printSlicesHex(otherStruct)
    }
    

    For each []byte, this example prints the name of the field and its data (in hex). You could improve on this by taking a custom function to do the printing, so you don't always have to print in hex.

    Playground Link

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c