【问题标题】:Julia - read UInt32 from UInt8 ArrayJulia - 从 UInt8 数组中读取 UInt32
【发布时间】:2020-05-29 11:44:55
【问题描述】:

我有从 TCPSocket 获得的 UInt8 数据数组。

我想从不同的索引中读取 UInt32s 和 UInt16s。

例如:

data = UInt8[0xFF, 0x00, 0x00, 0x00, 0xAA, 0x00]

// Something like this:
extracted_UInt32 = data.readUInt32(1) # [1-4]
extracted_UInt16 = data.readUInt16(5) # [5-6]

和 Node.js 的 Buffer.readUInt16LE(offset):https://nodejs.org/api/buffer.html#buffer_buf_readint16le_offset 完全一样

谢谢!

【问题讨论】:

    标签: arrays julia data-conversion


    【解决方案1】:

    您可以read 将缓冲区中的数据作为给定类型:

    julia> data = IOBuffer(UInt8[0xFF, 0x00, 0x00, 0x00, 0xAA, 0x00]);
    
    julia> a = read(data, UInt32)
    0x000000ff
    
    julia> b = read(data, UInt16)
    0x00aa
    

    您可以直接从 TCP 套接字执行此操作,而无需具体化为字节向量。

    【讨论】:

      【解决方案2】:

      我还发现reinterpret可以用:

      data = UInt8[0xFF, 0x00, 0x00, 0x00, 0xAA, 0x00]
      
      a = reinterpret(UInt32, data[1:4])
      b = reinterpret(UInt16, data[5:6])
      

      【讨论】:

      • 不过我猜应该是5:6
      • 裁剪数组以制作子数组并重新解释它们是否比读取 IO 缓冲区花费更多的性能?我很好奇。
      • 可能。特别是在创建数组时,您必须为分配付费。
      猜你喜欢
      • 2017-03-11
      • 2011-09-23
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多