我把一个结构体变量用CopyMemory转撚到一个BYTE数组里再从这个BYTE数组里还原出这个结构体type xxx
x1 as string * 10
x2 as string *10
end type假设定义A是上面的结构体变量赋值A.x1="123" A.x2="abc"将A转换为BYTE数组再还原到同一结构体变量B中debug.print B.x1得到“1 2 3 ”(中间有空格)
B.x2也是如此
若A.x1="1234567890"
则转换后debug.print B.x2输出结果为“1 2 3 4 5 ”超过10个字符后面自动被截断不知道是什么原因造成的,用LenB()得出A和B的字节长度是一致的。在线等答案!先谢谢各位了

解决方案 »

  1.   

    Option Explicit
    Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)Private Type xxx
        x1 As String * 10
        x2 As String * 10
    End TypePrivate Sub Form_Load()
        Dim x As xxx, b() As Byte
        x.x1 = "1234"
        x.x2 = "6789"    ReDim b(Len(x))    CopyMemory b(0), x, Len(x)    x.x1 = ""
        x.x2 = ""    CopyMemory x, b(0), Len(x)    Debug.Print x.x1, x.x2
    End Sub
      

  2.   

    x1 as string * 10 //我想是这里的问题: 这个不是指保存数据的长度(主要在这里出现了分歧)X1="12345" (48 49 50 51 52)而内存里面是 (00 48 00 49 00 50 00 51 00 52)
      

  3.   


    按塞北雪貂的代码偶改了一下。可以正常转换偶以前用的计算长度用的是LenB()。改成Len就可以了看了雪情的解释茅厕顿开谢谢两位