doupo2157 2017-01-24 16:09
浏览 134
已采纳

将uint32数组写入字节片中并获取回来

I'm trying to create a mock for a os.File or to be more specific io.Reader. I want to emulate reading of 128 bits of concrete data without actual reading.

With a single uint32 there is no problems.

Mock:

func (f *FileMock) Read(buf []byte) (n int, err error) {
    binary.BigEndian.PutUint32(buf, uint32(2052))
    return len(buf), nil
}       

Tested method (simplified):

b := make([]byte, 128)                                                      
meta_data := make([]uint32, 4)                                                                                                                                 
_, err = s.Read(b)                                                                          
if err != nil {                                                                             
    // Handle error         
}                                                                                                                                                                                       
binary.Read(bytes.NewBuffer(b), binary.BigEndian, &meta_data)                                                                                                                               
log.Print(meta_data) // Output [2052 0 0 0]

But when I need to mock reading of a uint32 slice PutUint32 is not helpful because it writes to a slice from beginning (overrites previously wrtten data). I tried a bunch of combinations of bytesand binary tools but had no luck every time I can't get the data back from bytes. There is my last attempt (it is not the only):

func (f *FileMock) Read(b []byte) (n int, err error) {
    buf := bytes.NewBuffer(make([]byte, len(b)))
    err = binary.Write(buf, binary.BigEndian, [4]uint32{2051, 123, 28, 28})
    buf.Read(b)
    return len(b), nil
}

With the same tested method as described above I'm obtaining an empty slice [0, 0, 0, 0]. Please note, this is a mock for os.File.Read method so I can't create a new slice of bytes instead of it I need to write my data to an existing slice.

At first I'm wondering how to solve the issue. Also I want to know why there is just [0, 0, 0, 0]?

Grateful for answers!

  • 写回答

1条回答 默认 最新

  • dsgdfg30210 2017-01-24 16:28
    关注

    Slices share an underlying array, you can write (PutUint32) to buf[4:], buf[8:] etc.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题