【问题标题】:copy byte array to memory location of a Instance of a Class将字节数组复制到类实例的内存位置
【发布时间】:2012-05-25 13:57:51
【问题描述】:

我正在尝试将字节数组复制到第三方库中的类中

    Dim usr As New RSI_USER_RECORD
    Dim ba(RSI_USER_RECORD.RSI_LEN_USER_REC - 1) As Byte
    'populate ba here
    usr = ba 'how can I do this?

这可能吗?

这是类的定义(来自Reflector)

Public Class RSI_USER_RECORD
    ' Methods
    Public Function Clone() As RSI_USER_RECORD
        Return New RSI_USER_RECORD With { _
            .pID = Me.pID.Clone, _
            .pTemplateVector = Me.pTemplateVector.Clone, _
            .authorityLevel = Me.authorityLevel, _
            .rejectThreshold = Me.rejectThreshold, _
            .timeZone = Me.timeZone _
        }
    End Function


    ' Fields
    Public authorityLevel As RSI_AUTHORITY_LEVEL = RSI_AUTHORITY_LEVEL.RSI_AUTHORITY_NONE
    Public pID As RSI_ID = New RSI_ID
    Public pTemplateVector As RSI_TEMPLATE = New RSI_TEMPLATE
    Public rejectThreshold As UInt16 = 0
    Public Const RSI_LEN_USER_REC As Integer ModOpt(IsConst) = &H10
    Public timeZone As Byte = 0
End Class

【问题讨论】:

  • 这个类对象最初是如何出现在字节数组中的?
  • @HansPassant - 我正在从作为字节数组返回的硬件设备中读取一个数据块,每个 16 字节块是一个 USER_RECORD
  • 那么它确实是一个结构。 stackoverflow.com/a/1936208/17034
  • 是的,它看起来像对象浏览器报告的结构:Public Class USER_RECORD Inherits System.Object

标签: .net vb.net arrays data-structures


【解决方案1】:

您的字节数组中的每个数据都必须在其中一个属性中分配。基本上你将不得不做类似的事情

authorityLevel = byte(someIndex)
pID = byte(someIndex)
pTemplateVector = byte(someIndex)
rejectThreshold = byte(someIndex)
timeZone =byte(someIndex)

在您的代码中:

Dim usr As New RSI_USER_RECORD
Dim ba(RSI_USER_RECORD.RSI_LEN_USER_REC - 1) As Byte
'populate ba here
usr = ba 'how can I do this?

您不能在对象中分配数组,但可以使用数组来初始化对象。喜欢

dim anInstance as new RSI_USER_RECORD(ba)

并创建一个新的构造函数来完成这项工作。

【讨论】:

    【解决方案2】:
        Dim usr As  USER_RECORD() ' init the values
        Dim ba As  USER_RECORD() = New  USER_RECORD(usr.Length - 1) {}
    
        For i As Integer = 0 To usr.Length - 1
            ba(i) = usr(i) ' if USER_RECORD is value type
           'ba(i) = DirectCast( usr(i).Clone(), USER_RECORD) ' if USER_RECORD is reference type
    
        Next
    

    【讨论】:

    • 问题是我有一个字节数组中的数据,我想基本上将它的内存复制到我的 USER_RECORD 实例的位置(这是一个类)
    • 好的,您是否正在寻找类似于缓冲区块复制的东西。您可以检查Buffer.BlockCopy,但您需要从 User_Record 中提取字节数组
    猜你喜欢
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多