• Go 以小端字节序修改文件


    如果你想将修改的值以小端字节序存储,你需要注意以下几点:

    1. 确保你的操作系统和硬件使用小端字节序。 大多数现代系统都使用小端字节序,但有些特殊情况下可能会使用大端字节序。

    2. 将数据转换为小端字节序。 Go语言的标准库提供了binary.LittleEndian用于处理小端字节序。你可以使用binary.LittleEndian的方法将数据从切片或整数类型转换为小端字节序。

    以下是一个示例,演示如何将修改的值以小端字节序存储:

    1. package main
    2. import (
    3. "encoding/binary"
    4. "fmt"
    5. )
    6. func main() {
    7. // 假设有一个名为 block 的切片
    8. block := make([]byte, 8)
    9. // 新的数据
    10. newData := uint32(0x04030201) // 注意:这是大端字节序的表示,需要转换为小端字节序
    11. // 使用 binary.LittleEndian 将新的数据转换为小端字节序并复制到 block[4:8] 中
    12. binary.LittleEndian.PutUint32(block[4:8], newData)
    13. // 打印修改后的 block
    14. fmt.Println("Modified block:", block)
    15. }
    1. package main
    2. import (
    3. "encoding/binary"
    4. "fmt"
    5. "log"
    6. "strconv"
    7. "strings"
    8. )
    9. func hexStringToLittleEndianBytes(hexString string, size int) ([]byte, error) {
    10. // 移除可能的前缀 "0x"
    11. hexString = strings.TrimPrefix(hexString, "0x")
    12. // 解析十六进制字符串为整数
    13. value, err := strconv.ParseUint(hexString, 16, size*8)
    14. if err != nil {
    15. return nil, err
    16. }
    17. // 创建小端字节序的切片
    18. bytes := make([]byte, size)
    19. switch size {
    20. case 4:
    21. binary.LittleEndian.PutUint32(bytes, uint32(value))
    22. case 8:
    23. binary.LittleEndian.PutUint64(bytes, value)
    24. default:
    25. return nil, fmt.Errorf("unsupported size: %d", size)
    26. }
    27. return bytes, nil
    28. }
    29. func main() {
    30. // 假设有一个十六进制字符串
    31. hexString := "0x04030201"
    32. // 将十六进制字符串转换为小端字节序切片
    33. bytes, err := hexStringToLittleEndianBytes(hexString, 4)
    34. if err != nil {
    35. log.Fatal("Error:", err)
    36. }
    37. // 打印结果\
    38. fmt.Println("ord hexString :", hexString)
    39. fmt.Println("Modified block:", bytes)
    40. fmt.Printf("0x16--Modified block %#x:", bytes)
    41. }
    42. #输出结果
    43. ord hexString : 0x04030201
    44. Modified block: [1 2 3 4]
    45. 0x16--Modified block 0x01020304:

    在这个示例中,binary.LittleEndian.PutUint32函数被用于将newData以小端字节序写入到block[4:8]中。请确保根据需要调整数据类型和字节范围。

  • 相关阅读:
    rabbitmq下载安装教程
    DNS服务器的访问日志
    react+ts之router管理
    NOA「破局」规模化
    金仓数据库KingbaseES服务器应用参考手册--8. sys_rewind
    JAVA计算机毕业设计电子商城系统Mybatis+源码+数据库+lw文档+系统+调试部署
    uniapp云打包app使用sqlite实现本地缓存,以及云打包sqlite不生效踩坑记录
    JS正则表达式
    Oracle中查询表结构的六种方法
    基于单片机的语音存储与回放系统设计
  • 原文地址:https://blog.csdn.net/royjj/article/details/134502025