国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

淺議VB6字節數組和字符串的相互轉換

2019-11-18 17:41:59
字體:
來源:轉載
供稿:網友
一、前言

  數據類型轉換在編程中經常用到,VB6提供了一整套類型轉換的函數。但是,在進行類型轉換時,有時候僅僅依靠VB提供的函數是不能達到自己的目的的。因此,需要考慮用其他的方法來完成數據類型轉換。本文僅談VB6中字節數組和字符串的相互轉換過程中應注意的問題及其解決辦法。

  在VisualBasic中使用Byte數組主要是為了32位API函數的參數傳遞和函數的返回。在32位的VisualBasic版本中,字符串被假定為Unicode字符,其中每個字符占用兩個字節。系統自動地將Unicode的兩個連續字節轉換成1個字節的ANSI字符。但是,如果該字符串包含二進制數據,其內容將變得很難理解。例如,一個漢字是兩個字節,在VisualBasic6.0中的長度就只是1,這將給我們計算單個漢字的國標碼帶來一些麻煩。有了Byte數組,這些問題就將迎刃而解。

  另外,VisualBasic中的字符串和C語言中的字符串有一些不同,本文將給出一個函數,把C字符串轉換成VisualBasic字符串。

二、用Byte數組代替字符串

  Byte數組包含的是0-255之間的ASCII碼字符,它不會象字符串那樣被系統作預處理。你可以在很多API函數中用來Byte數組代替字符串。

  例如,下面的代碼中用GetSystemDirectory這個WindowsAPI函數來取得Windows的系統路徑。一共有兩段代碼,一段代碼是傳遞一個字符串來存儲函數返回的系統路徑,另一段代碼是傳遞一個Byte數組來代替字符串。

  為了更好地比較,兩段代碼的不同部分都用黑體標出。讀者可以仔細比較這兩段代碼的差異,這樣您會更深入地理解Byte數組和字符串的差別。

  把這兩段代碼的任何一段放入一個窗體中運行,但擊窗體的空白區域,你將會在窗體中看到Windows的系統路徑。

  下面是使用字符串的代碼:

->
 DimiNullPosAsInteger
 Dim

 iIdx=0
 ReDimpsaStrings(0ToiIdx 1)
 psaStrings(iIdx 1)=""
 Do
  '
  iNullPos=InStr(iPrevPos 1,psMultiCString,vbNullChar)
  IfiNullPos>iPrevPos 1Then
   '把找到的C字符串賦值給字符串數組
   psaStrings(iIdx)=Mid$(psMultiCString,(iPrevPos 1),((iNullPos-1)-iPrevPos))
   iIdx=iIdx 1
   ReDimPreservepsaStrings(0ToiIdx)
   iPrevPos=iNullPos
  Else
   '找到了兩個Null字符,去掉最后一個,然后退出
   ReDimPreservepsaStrings(0ToiIdx-1)
   ExitDo
  EndIf
 Loop
EndSub->

  當調用Win32API函數時,使用這兩個簡單的函數,你可以消除很多冗余的代碼,加快開發步伐。

  注意:

  當你為API的返回值預先分配字符串的空間時,一定不要忘了空間內必須包含Null結束符。另外,建議你在使用API時,最好對每個變量都進行聲明,加上下面這句代碼:

->OptionExplicit->

五、小結

  VB6中字節數組和字符串的相互轉換是編程中,尤其是新手使用中最為頭疼的問題。本文歸納了軟件開發過程中使用二者的典型情況及其應該注意的問題,供參考。不當之處還請讀者批評指正。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 收藏| 丘北县| 辽阳县| 石景山区| 彩票| 丰台区| 福建省| 沈阳市| 靖远县| 锡林浩特市| 奉节县| 佛教| 乐平市| 烟台市| 日土县| 玉树县| 京山县| 东兴市| 阿拉善左旗| 离岛区| 洛南县| 邵阳市| 卓尼县| 淅川县| 唐海县| 大关县| 平阳县| 临武县| 琼结县| 郧西县| 宁强县| 大厂| 定州市| 和静县| 久治县| 资兴市| 汽车| 沽源县| 东至县| 巴彦县| 庆云县|