问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VB字符串和字节数组的转换

发布网友 发布时间:2022-04-18 18:18

我来回答

4个回答

热心网友 时间:2022-04-18 19:48

当我们在VB中调用Win32 API函数时,如果函数的返回值是一个字符串,那一般有如下三种情况:

   1. 函数预先要求你提供一个有固定空间的字符串,以供存储函数的返回值。

   2. 函数的返回是一个以Null结尾的C字符串,而不是正规的VB字符串。

   3. Win32 API函数有时候会返回另一种类型的字符串。这种类型的字符串在单个缓冲区内保存了多个字符串值,每个值之间用Null隔开,结尾的是两个Null,一个Null是最后一个字符串值的结尾符,另一个Null是整个字符串的结尾符。这其实就是我们通常在C中遇到的字符串数组。

   第一种情况很好办,只无原则预先定义好一个空间足够大的字符串,然后把API函数的返回值赋于这个字符串就可以了。例如,如果你已经知道函数返回值最多不会走过256个字符,可以这样编码如下:

DimsAPIReturnas string
SAPIReturn=Space$(256)
SAPIReturn=API_Function(…)

   对于第二和第三种情况,就必须把返回的C字符串成标准的VB字符串。下面这个函数CStringToVBString把一个以Null结尾的C字符串成VB字符串。

Public FunctionCStringToVBString(psCStringAs String)As string
 '参数psCString是一个待转换的C字符串
 '函数返回Null左边所有的字符

 dimsReturnas string
 dimiNullCharPosAs Integer

  iNullCharPos=InStr(psCString,vbNullChar)
 ifiNullCharPos >0then
   sReturn =left(psCString, iNullCharPos -1)
 else
   sReturn =pscstring
 end if
  CStringToVBString=sReturn
End function

   下面这个过程把一个含有多个C字符串的缓冲区转换成一个字符串数组。

Public SubMultiCStringToStringArray(psMultiCStringAs String, psaStrings()As String)
 '参数psMultiCString是待转换的多个C字符串
 '参数psaStrings是返回的VB字符串数组,调用之前它必须是一个动态的空数组

 DimiNullPosAs Integer
 DimiPrevPosAs Integer
 DimiIdxAs Integer

 '初始化字符串数组
  iIdx =0
 ReDimpsaStrings(0ToiIdx1)
  psaStrings(iIdx1) =""
 Do
   iNullPos = InStr(iPrevPos1, psMultiCString, vbNullChar)
  IfiNullPos > iPrevPos1Then
   '把找到的C字符串赋值给字符串数组
    psaStrings(iIdx) = Mid$(psMultiCString, (iPrevPos1), ((iNullPos -1) - iPrevPos))
    iIdx = iIdx1
   ReDim PreservepsaStrings(0ToiIdx)
    iPrevPos = iNullPos
  Else
   '找到了两个Null字符,去掉最后一个,然后退出
   ReDim PreservepsaStrings(0ToiIdx -1)
   Exit Do
  End If
 Loop
End Sub

   当调用Win32 API函数时,使用这两个简单的函数,你可以消除很多冗余的代码,加快开发步伐。追问我看过这篇文章,完全没重点,不知道讲什么

热心网友 时间:2022-04-18 21:06

当我们在VB中调用Win32 API函数时,如果函数的返回值是一个字符串,那一般有如下三种情况: 

1. 函数预先要求你提供一个有固定空间的字符串,以供存储函数的返回值。 

2. 函数的返回是一个以Null结尾的C字符串,而不是正规的VB字符串。 

3. Win32 API函数有时候会返回另一种类型的字符串。这种类型的字符串在单个缓冲区内保存了多个字符串值,每个值之间用Null隔开,结尾的是两个Null,一个Null是最后一个字符串值的结尾符,另一个Null是整个字符串的结尾符。这其实就是我们通常在C中遇到的字符串数组。 

热心网友 时间:2022-04-18 22:40

Dim S As String, a() As Byte, S1 As String
S = "123456abcdef"
a = StrConv(S, vbFromUnicode) '字符串转换为字节数组
S1 = StrConv(a, vbUnicode) '字节数组转换为字符串
MsgBox S1

热心网友 时间:2022-04-19 00:32

何为字节数组?追问dim arr() as byte

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小篇幅造句 易车如何发布二手车 转让卖车信息流程 《易车》群聊消息关闭方法 易车消息夜间勿扰方法步骤 易车如何开启消息夜间勿扰 易车 开启@消息推送 ...当入射角是 时,反射角是 。我们能从各个方向看到本身不发光的物体... 发泄的近义词和反义词是什么_发泄是什么意思? 我的世界手游 我的世界手机版怎么做末地传送门? 我的世界手游 末地传送门怎么做? 安全评价师的报考科目有什么 美的电压力锅锅盖铁和塑料松动冒气怎么办? 美的电压力锅my_ss5035p上盖怎么才能拆洗?不是内盖板,就是跟手柄连着那个!_百度问一问 万达贷怎么分期? 韶关市十二中94届三班有微信群吗? 沭阳县李恒中学94届二一班同学会微信群怎么加 微信红包可以分配吗 我看到人家早就抢红包了,因我刚刚登录微信,我不想点击,估计他们几个都抢完了,可我还是点击了,没想到 发定额红包看不到个数 我大专毕业,在富士康模具厂工作了3年半,现辞职了,想找个培训机构学习PLC编程,求大神指教! 我是POWERMLL编程UG拆电极!做了4年!想问下那找CNC工作容易? VS05的优点 如何知道自己有没有学习编程的天赋 如果我是一匹千里马却未被伯乐发现我该怎么想? 是否电子工程师不适合女孩子? 腌鱼咸了怎么样让它变淡 学编程前途问题!!! 小米5数字密码忘记了怎么办? 窗户关不上,把手往上扳之后,窗户就锁不上也扳不下来 秋天下雨的句子说说心情有哪些? 漠河什么时候可以看雪景?急!!! 汽车怠速抖动的七大原因与解决方法 车底盘抖动的原因? 汽车保养常识对于车子抖动都是有哪些解决方案? 汽车抖动的解决方案是什么呢? 电脑上什么浏览器好 为什么小狗咬小猫 为什么狗会咬猫啊 出于什么去咬啊家里的 为什么狗要咬猫??? 狗咬了猫流血了,猫对人有危害吗? 请问 为什么哔哩哔哩无线网 流量都无法使用 其他软件明明可以正常上网? iPhone连接的网络正常,可以正常使用浏览器和QQ等,但是没有办法在哔哩 济南编程兔教育咨询有限公司怎么样? 学习宝推荐济南编程哪家最好? 水稻种植时间是多少天 水稻播种到出需要多少天 头发种植的原理是什么 种头发原理是什么? 请问植发的原理是什么 头发能种吗,头发怎么种的,谁知道种头发的原理? 种头发原理是什么