官术网_书友最值得收藏!

2.2.2 取得字符串的某種編碼形式

對上例略加修改,得到下例。

getStringGBKFormat.asp

<%
text = "今天下雪了。"
result = ""

'輸出字符長度
response.write "字符長度:" & Len(text) & "<br>"

'循環每一個字符
For i=1 To Len(text)
    oneByte = Mid(text, i,1)        '得到一個字符
    number = Asc(oneByte)           '該字符對應的數字
    numberHex = Hex(number)         '數字的十六進制形式

    '如果十六進制形式只有一位,則前面補一個0
    If Len(numberHex) = 1 Then
            numberHex = "0" & numberHex
    End If

    '拼接結果
    result = result & " " & numberHex
Next
response.write result '輸出結果
%>

運行結果如圖2-5所示。

圖2-5 字符串的某種編碼形式

輸出的是幾個字符的GBK編碼,而非內存存儲形式。將程序中的Asc函數換為AscW函數,得到另一個示例getStringUnicodeFormat.asp。

運行結果如圖2-6所示。

該例輸出的是幾個字符的Unicode編碼。對照變量的內存存儲形式,可以發現,每個字符的兩個字節順序是相反的。如“今”字的內存存儲形式是“CA 4E”,而該例輸出的是“4E CA”。這是為什么呢?其實還是字節順序的問題。“今”字的Unicode編碼其實就是“4E CA”,其中“4E”是高字節,“CA”是低字節,內存變量采用的是Little Endian方式,所以是“CA 4E”。

圖2-6 字符串的Unicode編碼形式

簡單總結一下,涉及字節操作的時候(如使用LenB、MidB、LeftB等函數),才需要考慮變量的內存存儲形式。如果只是字符操作,那么在字符這一層面考慮即可,Asc等函數會屏蔽掉字節順序的問題,返回正確的結果。

主站蜘蛛池模板: 绥芬河市| 北宁市| 称多县| 兴隆县| 徐闻县| 锡林浩特市| 洞头县| 泽普县| 平陆县| 综艺| 铁岭市| 邢台县| 金山区| 尉氏县| 舒城县| 额尔古纳市| 彰武县| 青海省| 榆社县| 永年县| 留坝县| 莲花县| 大城县| 基隆市| 上思县| 尉犁县| 陇西县| 石狮市| 涡阳县| 藁城市| 甘洛县| 建平县| 民权县| 大同县| 河池市| 新营市| 大丰市| 遂宁市| 海阳市| 永登县| 武定县|