- 深入解析ASP核心技術
- 王洪影
- 632字
- 2019-01-03 18:15:43
2.1.3 數據類型與內存存儲的關系
下文中未加特殊說明的,所討論的編程語言均為VBScript。
在文本與二進制數據轉換中,涉及的數據類型主要是Byte、Integer、Long和String這4種。這幾種數據類型與它們的內存存儲的對應關系如表2-2所示。
表2-2 數據類型與內存存儲的關系

某些人可能會疑惑,以Integer為例,為什么內存存儲的是“41 00”,不應該是“00 41”嗎?沒錯,從概念上來說,應該是“00 41”。這里有一個字節順序的問題,字節順序主要分為Big Endian和Little Endian兩種,“00 41”是Big Endian的寫法,即高位字節在前、低位字節在后,而在VbScript語言中,實際內存存儲使用的是Little Endian的寫法。內存變量使用哪種字節順序,是受CPU、操作系統、編程語言等多個因素影響的,屬于底層實現機制,在這個問題上我們不必過于糾結。通常,按概念上的理解來處理二進制數據即可,這里是為了便于后面的AscB等函數的講解,所以才寫成了Little Endian的形式。
從表22可以看出,字符“A”的內存存儲與Integer型的65是一致的,其實,65就是字符“A”的編碼數字。在一些語言中,字符是可以當作數字來參與計算的,因為字符的實質就是數字。
如下是一段C語言的程序。
#include<stdio.h> #include<conio.h> main() { Char ch = 'A'; ch = ch + 32; printf("%c", ch); getch(); Return 0; }
該程序在字符“A”上直接加上了32,輸出結果是一個字符“a”,因為后者的編碼是97。大寫字母A~Z的編碼范圍是65~90,小寫字母a~z的編碼范圍是97~122。只要取得字母的編碼數字,然后加上或減去32,即可實現大小寫字母之間的轉換。
在VBScript中也可以這樣做,不過不能如此直接,需要借助Asc和Chr函數進行類型轉換。如下例也會輸出字符“a”。
ch = "A" ch = Asc(ch) +32 response.write Chr(ch)