怎么把字符串赋值给定长byte数组?
如题:
我定议了一个结构
里面有byte数组.我直接给值出错!!
[解决办法]
COPYMEMORY() API
[解决办法]
b()=StrConv(yourstr,vbFromUnicode)
'将字符串转换成字节数组
[解决办法]
用copymemory可以实现
[解决办法]
你的代码?
[解决办法]
关注,学习,俺是菜鸟
[解决办法]
要转换的!
[解决办法]
晕写入文件直接保存就可以了,何必费呢么多事情呢。
[解决办法]
CopyMemory tmpbyte(0), StrConv(tmpstr, vbFromUnicode), LenB(StrConv(tmpstr, vbFromUnicode))
另:
你写入文件是追加在文件尾的,你读出时要注意你刚写入的内容在后面。
[解决办法]
//1 晕写入文件直接保存就可以了,何必费呢么多事情呢。
====
我想做一个简单的数据记录,这个文件里面可能有很多条记录,如果不以定长保存!我怎么去去读其中一条呢?//
用random读写文件,定义个结构就可以了嘛,copymemory很容易让程序挂掉,我现在都不怎么敢用了,vb里面的指针就是黑盒子啊。。。
[解决办法]
//现在的问题是:写进去和读出来的内容不一样!
先读出来,然后用strconv转化为字串,可能需要用left截断
还有,你的copymemory是怎么声明的?
[解决办法]
1 晕写入文件直接保存就可以了,何必费呢么多事情呢。
====
我想做一个简单的数据记录,这个文件里面可能有很多条记录,如果不以定长保存!我怎么去去读其中一条呢?
2
CopyMemory tmpbyte(0), StrConv(tmpstr, vbFromUnicode), LenB(StrConv(tmpstr, vbFromUnicode))
另:
你写入文件是追加在文件尾的,你读出时要注意你刚写入的内容在后面。
=====
我就先照上面的代码,写250字节.再回头去读250字节出来..显示的内容就和写进去的不同了..这个问题出在哪啊?
==================================================================================
用二进制文件来记录是不需要定长的。你只要定义一个结构,将数据放在结构里,直接“put #1,,结构变量” 就可以完成写入数据的操作(只能追加),在读取时:“seek 1,1: get #1,,结构变量”,可以从文件中读出所有的数据记录。
[解决办法]
即使这样也没有必要转换成字结数组,直接保存字符串,定义结构
比如
type MyData
ID as integer
strInfo as string * 249
end type
dim sRec as MyData
sRec.ID=1
sRec.strInfo= "有一些中文字符,又有一些E文如:hi "
Open tmpUrlPath For Random As MyHNd len=len(MyData)
Put MyHNd, 1, sRec
Close MyHNd
[解决办法]
本来是字符串,用数组保存,读出来还要转换,那不是找麻烦阿。
[解决办法]
使用结构+随即文件操作是一个不错的选择,
这里给你两个小小的子程序,分别用来写和读记录:
'将设置从文件中一次性读入自定义类型变量Settings中
Public Sub GetSetting(ByVal IniFile As String)
Dim I As Long
I = Len(Settings)
ChDir App.Path
Close #1
Open IniFile For Random As #1 Len = I
Get #1, 1, Settings
Close #1
AddOpe "GetIni " & IniFile
End Sub
'将自定义变量Settings中的内容保存到文件
Public Sub WriteSetting(ByVal IniFile As String)
Dim I As Long
I = Len(Settings)
ChDir App.Path
Close #1
Open IniFile For Random As #1 Len = I
Put #1, 1, Settings
Close #1
AddOpe "WriteIni " & IniFile
End Sub
这两段是我自己的程序中现用的,自定义数据类型为:
Type Setting
Transparent As Boolean
SavingP As String * 100
BackG As String * 100
TransparentLevel As Byte
SortType As Byte
LayOuts As LayOut
PrintSettings As PrintSetting
Batch As Integer
End Type
Public Settings As Setting
当然,楼主不必照抄这个,因为它可以是任何类型的变量,当然也包括数组。
[解决办法]
忘记了一点,上面两段程序中的AddOpe ...楼主要去掉,那是我用来做LOG记录的,和题意无关。