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,还要考虑在第几个字符开始取多少字符
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,还要考虑在第几个字符开始取多少字符
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
按照您的方法
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
我改成:
tmpStr = Replace(rcvStr, "|", "")
MoveMemory ByVal VarPtr(DataFromTax), ByVal StrPtr(tmpStr), 2*Len(tmpStr)
就可以了!
不知道反过来怎么来?请帮忙 !!!