三 字串操作

2021-10-07 17:45:40 字數 4583 閱讀 8184

​ 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...