Public Type AAA_PACK_STRUCT    
       JYM As String * 4         
       JYJG As String * 2         
       JYLSH As String * 18      
       WJDX As String * 10       
       WJM As String * 30                   
       ........'结构成员有20个差不多
End TypeDim tmpStr AS String
winsock.GetData tmpStr'tmpStr字符串内容是上面结构体的每个成员内容以"|"隔开,
'如:0000|01|200308080000001234|8888888888|kffs555.....
Dim tmpStruct as AAA_PACK_STRUCT
'如果想把tmpStr的内容赋给tmpStruct结构体的每个成员最简便的方法是什么?
'不用以下方法:
tmpStruct.JYM=Mid(tmpStr,1,4)
tmpStruct.JYJG=Mid(tmpStr,6,2)
.....
如果反过来把结构体的每个成员以"|"隔开,赋给一个tmpStr字符串又怎么来
'不用以下方法:
tmpStr=tmpStruct.JYM & "|" & tmpStruct.JYJG & "|" &.......因为结构成员太多,不想每次要写20多个Mid,还要考虑在第几个字符开始取多少字符

解决方案 »

  1.   

    N
    XIAcvfg
    Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)Private Type AAA_PACK_STRUCT
           JYM As String * 4
           JYJG As String * 2
           JYLSH As String * 18
           WJDX As String * 10
           WJM As String * 30End TypeDim tmpStr As Variant
    Dim aa As AAA_PACK_STRUCTPrivate Sub Command1_Click()
       tmpStr = "123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789"
       MoveMemory ByVal VarPtr(aa), ByVal StrPtr(tmpStr), Len(tmpStr)
       Debug.Print aa.JYM
       Debug.Print aa.JYJG
       Debug.Print aa.JYLSH
       Debug.Print aa.WJDX
       Debug.Print aa.WJM
       
    End Sub
      

  2.   

    注意,先用Replace(tmpStr, "|", "")去掉"|"
      

  3.   

    Dim tmpStr As String ‘可以为字符串
      

  4.   

    TO:yefanqiu(叶帆) 
    按照您的方法
    Dim tmp_JYM As String * 4             
    Dim tmp_JYJG As String * 2          
    Dim tmp_JYLSH As String * 18        
    Dim tmp_WJDX As String * 10         
    Dim tmp_WJM As String * 30          
    Dim tmp_ZGYH As String * 3       
    Dim tmp_SWSH As String * 8    
    Dim tmp_SSZH As String * 25     
    Dim tmp_QYBM As String * 18    
    Dim tmp_JKBM As String * 6    
    Dim tmp_KHYH As String * 8    
    Dim tmp_QYZH As String * 25    
    Dim tmp_YHMM As String * 10    
    Dim tmp_QSRQ As String * 10    
    Dim tmp_ZZRQ As String * 10    
    Dim tmp_JYJE As String * 16    
    Dim tmp_PLBM As String * 4    
    Dim tmp_ZGBM As String * 10   
    Dim tmp_SPH As String * 8    
    Dim tmp_BL As String * 50  tmpStr = Replace(rcvStr, "|", "")
    MoveMemory ByVal VarPtr(DataFromTax), ByVal StrPtr(tmpStr), Len(tmpStr)tmp_JYM = DataFromTax.JYM: tmp_JYJG = DataFromTax.JYJG
    tmp_JYLSH = DataFromTax.JYLSH: tmp_WJDX = DataFromTax.WJDX
    tmp_WJM = DataFromTax.WJM: tmp_ZGYH = DataFromTax.ZGYH
    tmp_SWSH = DataFromTax.SWSH: tmp_SSZH = DataFromTax.SSZH
    tmp_QYBM = DataFromTax.QYBM: tmp_JKBM = DataFromTax.JKBM
    tmp_KHYH = DataFromTax.KHYH'tmp_QYZH只能得到前面的几位,以后就得不到数据了,是不是数据大小有限制的???
    前面得到大概140不到
    tmp_QYZH = DataFromTax.QYZH 
    tmp_YHMM = DataFromTax.YHMM: tmp_QSRQ = DataFromTax.QSRQ
    tmp_ZZRQ = DataFromTax.ZZRQ: tmp_JYJE = DataFromTax.JYJE
    tmp_PLBM = DataFromTax.PLBM: tmp_ZGBM = DataFromTax.ZGBM
    tmp_SPH = DataFromTax.SPH: tmp_BL = DataFromTax.BL
      

  5.   

    最新的提问的关于得不到以后的数据的问题已解决!!
    我改成:
    tmpStr = Replace(rcvStr, "|", "")
    MoveMemory ByVal VarPtr(DataFromTax), ByVal StrPtr(tmpStr), 2*Len(tmpStr)
    就可以了!
    不知道反过来怎么来?请帮忙 !!!