我要编写一个数据加密程序,需要获取字符(包括汉字)的内部二进制表示,在vb中应如何实现?我不太清楚Unicode 和 ascii的区别,麻烦大家帮忙解释一下,还有中、英文在存储时到底有哪些差别,在读取时,系统是如何处理的?

解决方案 »

  1.   


    Dim str As String
    str = "fd发"
    Debug.Print Len(str) ' 3
    Debug.Print LenB(str) '6Debug.Print LenB(StrConv(str, vbFromUnicode))  '4
    Dim byt() As Byte
    Dim i As Integer
    byt = StrConv(str, vbFromUnicode) 
    For i = LBound(byt) To UBound(byt)
        Debug.Print byt(i)
    Next i
      

  2.   

    获取汉字不知道,获取英文字符用Asc、AscW、AscB.  AscB 函数作用于包含在字符串中的字节数据,AscB 返回第一个字节的字符代码,而非字符的字符代码。AscW 函数返回 Unicode 字符代码,若平台不支持 Unicode,则与 Asc 函数功能相同。
      简单说Unicode就是用16位表示一个字符,Ascii用8位表示.
      中英文同“傻小子”的.
      

  3.   

    关于字符方面的函数只要函数尾加B就行了,如:Len("abc啊")==4;而LenB("abc啊")==5
    StrConv 函数可以进行转换
    MSDN中的解释:返回按指定类型转换的 Variant (String)。语法StrConv(string, conversion, LCID)StrConv 函数的语法有下面的命名参数:部分 说明 
    string 必要参数。要转换的字符串表达式。 
    conversion 必要参数。Integer。其值的和决定转换的类型。 
    LCID 可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。) 
    设置值conversion 参数的设置值为:常数 值 说明 
    vbUpperCase 1 将字符串文字转成大写。 
    vbLowerCase 2 将字符串文字转成小写。 
    vbProperCase 3 将字符串中每个字的开头字母转成大写。 
    vbWide* 4* 将字符串中单字节字符转成双字节字符。 
    vbNarrow* 8* 将字符串中双字节字符转成单字节字符。 
    vbKatakana** 16** 将字符串中平假名字符转成片假名字符。 vbHiragana** 32** 将字符串中片假名字符转成平假名字符。 
    vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。 
    vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。 *应用到远东国别。**仅应用到日本。注意 这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。当在不适用的国别使用常数 vbWide、vbNarrow、vbKatakana,和 vbHiragana 时,就会导致运行时错误。下面是一些一般情况下的有效分界符:Null (Chr$(0)),水平制表符 (Chr$(9)),换行 (Chr$(10)),垂直制表符 (Chr$(11)),换页 (Chr$(12)) ,回车 (Chr$(13)),空白 (SBCS) (Chr$(32))。在 DBCS中,空白的实际值会随国家/地区而不同。说明在把 ANSI 格式的 Byte 数组转换为字符串时,您应该使用 StrConv 函数。当您转换 Unicode 格式的这种数组时,使用赋值语句。
      

  4.   

    有没有内置函数可以将byte类型转换成二进制直接输出?
      

  5.   

    呵呵,不需要转化的,
    Open FileName For Binary as #FreeNum
    put #FreeNum, ,10
    Close #FreeNum
    输出去的就是10的二进制0A