windows核心編碼字符集採用unicode字符集,字串處理使用unicode_string,是乙個結構體,定義如下:
typedef
struct _unicode_string unicode_string;
length 字串長度,maximumlength 字串緩衝區長度,buffer 字串緩衝區指標變數。
第一種方式,以區域性變數方式,讓unicode_string的buffer指向乙個已宣告的wchar陣列。
unicode_string strdest;
wchar dest_buf[
256]
;rtlinitemptyunicodestring
(&strdest, dest_buf,
256*
sizeof
(wchar)
);
rtlinitemptyunicodestring去初始化strdest。
第二種方式,使用rtlinitunicodestring函式去初始化乙個unicode_string變數,給其複製,分配空間
unicode_string strsource;
rtlinitunicodestring
(&strsource, l"測試字串連線"
);
第三種方式,動態申請空間,類似應用程式的malloc函式。
unicode_string strdest;
strdest.length =0;
strdest.maximumlength =
sizeof
(wchar)
*1024
; strdest.buffer =
(pwch)
exallocatepoolwithtag
(pagedpool,
sizeof
(wchar)
*1024
, memtag);if
(!strdest.buffer)
unicode_string strsource;
rtlinitunicodestring
(&strsource, l"測試字串連線");
kdprint((
"source is %wz位元組長度%d 最大長度%d.\n"
,&strsource, strsource.length, strsource.maximumlength));
rtlcopyunicodestring
(&strdest,
&strsource)
;kdprint((
"dest is %wz 位元組長度%d 最大長度%d.\n"
, strdest, strdest.length, strdest.maximumlength)
);
unicode格式化字串輸出使用%wz,ansi格式化字串輸出使用%x
unicode_string strtmp;
rtlinitunicodestring
(&strtmp, l"this is a new string");
ntres =
(&strdest,
&strtmp)
;
unicode_string ucp1, ucp2;
rtlinitunicodestring
(&ucp1, l"hello a world.");
rtlinitunicodestring
(&ucp2, l"hello b world.");
long lret =
rtlcompareunicodestring
(&ucp1,
&ucp2, true);if
(lret >0)
else
if(lret <0)
else
rtlcompareunicodestring類似應用程式的strcmp函式,返回值為三種值,大於0,等於0,小於0,其第三個引數表示是否大小寫敏感。
//unicode與多位元組互轉
unicode_string unitrans;
rtlinitunicodestring
(&unitrans, l"test unicode to ansi");
ansi_string ansitrans;
rtlunicodestringtoansistring
(&ansitrans,
&unitrans, true)
;kdprint((
"%wz to ansi is %z"
,&unitrans,
&ansitrans));
rtlansistringtounicodestring
(&unitrans,
&ansitrans, true)
;kdprint((
"%z to ansi is %wz"
,&ansitrans,
&unitrans)
);
#include
#define memtag 'test'
void driverunload
(pdriver_object pdriverobject)
ntstatus driverentry
(pdriver_object pdriverobject, punicode_string reg_path)
unicode_string strsource;
rtlinitunicodestring
(&strsource, l"測試字串連線");
kdprint((
"source is %wz位元組長度%d 最大長度%d.\n"
,&strsource, strsource.length, strsource.maximumlength));
rtlcopyunicodestring
(&strdest,
&strsource)
;kdprint((
"dest is %wz 位元組長度%d 最大長度%d.\n"
, strdest, strdest.length, strdest.maximumlength));
unicode_string strtmp;
rtlinitunicodestring
(&strtmp, l"this is a new string");
ntres =
(&strdest,
&strtmp);if
(nt_success
(ntres)
)else
kdprint((
"列印 %wz 位元組長度%d 最大長度%d.\n"
,&strdest, strdest.length, strdest.maximumlength));
//比較字串
unicode_string ucp1, ucp2;
rtlinitunicodestring
(&ucp1, l"hello a world.");
rtlinitunicodestring
(&ucp2, l"hello b world.");
long lret =
rtlcompareunicodestring
(&ucp1,
&ucp2, true);if
(lret >0)
else
if(lret <0)
else
//unicode與多位元組互轉
三 字串 一
三 字串 1。直接量三種寫法 1 單引號,不會替換變數,且只支援 兩個轉譯字元 2 雙引號,會進行變數替換,雙引號能支援除了 以外的所有轉譯符 3 heredoc,比如 string end of string haha hehe hoho.hehe end of string 其中end of s...
三 字串補充
1 輸出函式中的字串的格式化 之前有簡單地使用了說明了prin函式中字串的拼接。name xiong age 21 男 high 175weight 56 print 我姓 s,性別 s,今年 s歲,身高 scm,體重 skg。name,age,high,weight 為了保證絕對正確。只需要將上面...
三 字串 向量 陣列
直接初始化和拷貝初始化 string s1 10,c string s2 string 10,c 會影響效能 s1.size 返回物件中字元的個數,型別為string size type,是無符號型別,不要與有符號型別混用 範圍 for string str some string for auto...