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

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)
主站蜘蛛池模板: 麦盖提县| 锦州市| 来安县| 正阳县| 五大连池市| 望都县| 临泽县| 绍兴市| 鹿邑县| 静宁县| 门源| 池州市| 菏泽市| 德格县| 朝阳区| 巨野县| 镇坪县| 哈尔滨市| 纳雍县| 彝良县| 瓦房店市| 甘南县| 潮安县| 砀山县| 井陉县| 收藏| 临沧市| 玉林市| 英山县| 晋江市| 北京市| 密云县| 中江县| 平邑县| 太白县| 新兴县| 调兵山市| 偏关县| 会宁县| 兴宁市| 广宗县|