比如说我有一个BYTE数组,50字节长,我想把字符串"ab中国"赋值给这个数组,如何做?
"ab中国"实际占用的字节数应该是12个(VB中是Unicode,中文又要多占2个),我用API函数CopyMemory总报错
请指教,谢谢,最好有个例子

解决方案 »

  1.   

    另外用StrConv函数转,watch的时候怎么也只是4个字节?
      

  2.   

    API怎么会报错的? 字节长度这么写 
    tmp = strconv (tmp , vbfromunicode)
    ltmp = lenb (tmp) + 1
    然后再用copymemory
      

  3.   

    jlum99(闲人) :
       tmp是什么类型?
      

  4.   

    jlum99(闲人) (:
      不行啊,用 copymemory,只考过去3个字节,而且返回的长度也只是7(代码中的m)
      代码如下,其中userm.szUserName是50字节的BYTE数组:
      Dim strlen As String
      strlen = StrConv(str, vbFromUnicode)
      m = LenB(strlen) + 1
      Call CopyMemory(userm.szUserName(0), str, m)
      

  5.   

    晕了你的代码是怎么写的啊??改!!!
    dim strlen as long 
    dim str as string
    str = strconv(str , vbfromunicode)
    strlen = lenb(str) +1 
      

  6.   

    jlum99(闲人) :
        刚才没写全,其实和你的一样:
        Dim str as String
        Dim strlen As String
        Dim m as long
        str = "AB中国"
        strlen = StrConv(str, vbFromUnicode)
        m = LenB(strlen) + 1
        Call CopyMemory(userm.szUserName(0), str, m)
        CopyMemory之后只考过去3个字节
      

  7.   

    将内容存入文件然后
    redim empbytes(50) as byte
    open "c:\temp.tmp" for binary as #1
       get 1,1,empbytes(50)
    close #1
      

  8.   

    你的变量 Dim strlen As String什么意思???
      

  9.   

    谢谢各位,问题解决了,代码如下:
    Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Public Sub Command1_Click()
        Dim a As New MD5COMLib.SinforMD5
        Dim i As Long
        Dim j As Long
        Dim m As Long
        Dim bytHello() As Byte
        Dim strlen As String
        Dim userm(0 To 9) As userMD5com
        Dim str As String
        Dim MD5str As String
        '³õʼ»¯
        For j = 0 To 9
        userm(j).byavalid = 0
        userm(j).lUserID = 0
        userm(j).byType = 0
          For i = 0 To 7
          userm(j).szpublickey(i) = 0
          Next
          For i = 0 To 49
          userm(j).szUserName(i) = 0
          Next
        Next
        str = "ABÖйú"
        bytHello = StrConv(str, vbFromUnicode)
        strlen = StrConv(str, vbFromUnicode)
        m = LenB(strlen)
        Call CopyMemory(userm(0).szUserName(0), bytHello(0), m)
        Call a.UserMD5toStr(userm(0), 64 * 10, MD5str)
    End Sub