【正文】
tpLower。 { set the priority to lower than normal } 。 { now run the thread } end。 第 4章 串行通信中的字符與字節(jié) 字符與字節(jié) 字節(jié)數(shù)據(jù)的傳送與接收 字符與字節(jié) ?字符和字節(jié)的差別 ? Delphi中的字符串種類及處理函數(shù) ?中英文字符串長度計算 字符和字節(jié)的差別 Windows支持的字符集有單字符集、雙字節(jié)字符集及 UniCode字符集,在西方國家使用 Windows系統(tǒng)基本使用單字符集,每一個字符都使用一個字節(jié)來表示;而亞洲國家由于字符無法單用一個字節(jié)表示,因此使用雙字節(jié)字符集,其中每個字符使用雙字節(jié)字符集。 UniCode UniCode涵蓋了世界上所有國家的字符碼,每個字符用一個唯一的內(nèi)碼來表示,其特點是所有的字符以兩個字節(jié)表示,不僅中文使用兩個字節(jié),英文也使用兩個字節(jié) 串口通信過程中,如果傳送的是一個英文字節(jié)組成,只要一個字節(jié)就可以將信息傳送出去;如果傳送的是雙字節(jié)的字符(如中文),完整的字符傳送就必須是兩個字節(jié)。 Delphi中的字符串種類及處理函數(shù) Chr(x):返回 X參數(shù)的字符 Ord(x):返回 x參數(shù)所列的序數(shù),一般用來解讀字符在 ASCII碼中的序數(shù) Pos(substr,str):返回 str中, substr出現(xiàn)的位置,若找不到則返回 0 StrPos(str1,str2):返回 str2在 str1出現(xiàn)的第一位置的指針,無則返回 nil Copy(str,index,count):返回 str參數(shù)中,索引 index開始的 count數(shù)目的字串 Delete(str,index,count):刪除 str字串中,由 index所指定的開始位置的count數(shù)目的字串 Length(str):返回字串 str的長度 SetLength(str,newlen):設置 str的長度 Value(str,value,code):將 str轉成數(shù)值 value, code表示發(fā)生錯誤的位置 Str(value,str): Trim(str),TrimRight(str),TrimLeft(str):去空格 StringReplace(str,oldpattern,newpattern):替換 Insert(s1,s2,index):s1插入 s2的第 index位置 中英文字符串長度計算 Type Maximum length Memory required Used for ShortString 255 characters 2 to 256 bytes backward patibility AnsiString ~2^31 characters 4 bytes to 2GB 8bit (ANSI) characters WideString ~2^30 characters 4 bytes to 2GB Unicode characters。 multiuser servers and multilanguage applications Var InstrW:WideString。 InstrA:ANSIString。 Instr:string。 Begin Instr:=。 InstrW:=。 InstrA:=。 :=inttostr(length(Instr))。 :=inttostr(length(InstrW))。 :=inttostr(length(InstrA))。 End。 現(xiàn)象 ? 純英文字符串使用三種字符串的計算結果相同,顯示出一樣的字符串長度 ? 純中文字符串時, String和 ANSIString所呈現(xiàn)的結果一樣,但 WideString的字符串長度只有它們的一半 ? 中英文混合時, String及 ANSIString所呈現(xiàn)的結果還是一樣,中文占兩個字符和英文占一個字符;但 WideString類型中英文和中文都只占一個字符, 結論 ? Length函數(shù)在不同的類型下所作的計算是不一樣的 ? Delphi的確是以 String作為默認的長字符串類型 ? 字符串的長度計算可以用 WideString類型來進行,在這種情況下,一個中英文字符均被計算為一個字符 ? 實際所占的字節(jié)大小需要使用 String的類型來計算 字符編碼 一般的英文字符,可以使用 Ord取得其在ASCII表中的代表號碼;反過來說,如果想以一個號碼而得知其所代表的 ASCII字符是什么,則可以使用 chr函數(shù)來實現(xiàn)。 Var instr:string。instrW:Widestring。 i,len:integer。 temp:string。 Begin instr:=。 instrW:=。 len:=length(instr)。 temp:=‘’ 。 for i:=1 to len do temp:=temp+inttostr(ord(instr[i]))。 :=temp。 len:=length(instrW)。 temp:=‘’ 。 for I:=1 to len do temp:=temp+inttostr(ord(instrW[i]))。 :=temp。 End。 字節(jié)數(shù)據(jù)的傳送與接收 ?字節(jié)類型、聲明與傳送 /接收 ?動態(tài)數(shù)組 數(shù)組名: Array[startIndex..EndIndex] of 類型 ByteSend:Array[0..9] of Byte。 ByteSend[0]:=123。 ByteSend[1]:=46。 動態(tài)數(shù)組 動態(tài)數(shù)組:聲明時不指定數(shù)組的大小,而在需要使用數(shù)組之前再指定該數(shù)組的大小 Delphi中對于動態(tài)數(shù)組的聲明方式如下: ByteReceive:array of Byte。 ….// 其他代碼 SetLength(ByteReceive,count) var ByteSend:array of byte。 ByteReceive:array of byte。 count,i:dword。 FHandle: THandle。 begin FHandle := CreateFile(pchar(39。COM139。),GENERIC_READ or GENERIC_WRITE, 0, nil, PEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0)。 SetLength(ByteSend,)。 for i:=0 to 1 do ByteSend[i]:=StrtoInt([i])。 count:=0。 WriteFile(FHandle,bytesend,count,nil)。 showmessage(inttostr(count))。 closehandle(FHandle)。 end。 謝謝觀看 /歡迎下載 BY FAITH I MEAN A VISION OF GOOD ONE CHERISHES AND THE ENTHUSIASM THAT PUSHES ONE TO SEEK ITS FULFILLMENT REGARDLESS OF OBSTACLES. BY FAITH I BY FAITH