**:
1.字串結構
驅動中字串有uniocde_string和ansi_string兩種結構
unicode_string定義如下:
typedef struct _unicode_stringunicode_string,*punicode_string
ansi_string定義如下:
typedef struct _stringansi_string,*pansi_string
驅動中主要都是unicode編碼字串,ansi少數場合使用。
2.字串操作rtl系列函式
★字串的初始化rtlinitunicodestring
unicode_string str;
rtlinituniocdestring(&str,l」unicodestring」);
★字串的拷貝 rtlcopyunicodestring
1.不分配記憶體字串拷貝
unicode_string dst; //目標字串
wchar dst_buf[256]; //緩衝區
unicode_string src; //源字串
rtlinituniocdestring(&src,l」unicodestring」);
rrlinitemptyunicodestring(&dst,dst_buf,256*sizeof(wchaar)); //把目標字串初始化為緩衝區長度為256雙字的unicode_string結構
rtlcopyunicodestring(&dst,&src); //字串拷貝
2.動態分配記憶體拷貝
#define mem_tag 『my』 //定義記憶體分配標記
unicode_string dst=;
unicode_string src=;
rtlinitunicodestring(&src,l」unicodestring」);
dst.buffer=(pwchar)exallocatepoolwithtag(nonpagepool,src.length,mem_tag); //給目標字串動態分配大小
if(dst.buffer==null)
錯誤處理
dst.length=dst.maximumlength=src.length;
rtlcopyunicodestring(&dst,&src);
//記憶體洩漏問題,用完要釋放記憶體
exfreepool(dst.buffer);
dst.buffer==null;
dst.length=dst.maximumlength=0;
unicode_string dst;
dst.buffer=(pwchar)exallocatepoolwithtag(nonpagedpool,256,mem_tag);
unicode_string src;
rtlinitunicodestring(&src,l」myunicode」);
rtlcopyunicodestring(&dst,&src);
rtlinitunicodestring(&src,l」string」);
kdprint((「%wz」,&dst));
exfreepool(dst.buffer);
wchar buf[256];
unicode_string dst,src;
rtlinitemptyunicodestring(&dst,buf,256*sizeof(wchar));
rtlinitunicodestring(&src,l"myunicode");
rtlcopyunicodestring(&dst,&src);
rtlinitunicodestring(&src,l"string");
kdprint(("%wz",&dst));
3.dbgprint格式說明符
4.dbgprint函式列印字串
unicode_string src;
dbgprint(「%wz」,&src);
dbgprint(「%s」,src.buffer);
dbgprint(「%ws」,src.buffer);
不推薦使用後2個
ansi_string src;
dbgprint(「%z」,&src);
dbgprint(「%s」,src.buffer);
其他格式跟printf一樣
5.ansi_string和unicode_string轉換
rtlunicodestringtoansistring()
rtlunicodestringtoansistring()
unicode_string stc;
ansi_string dst;
rtlinitansistring(&dst,」hello world!」);
rtlansistringtounicodestring(&src,&dst,true);//需要釋放記憶體。
rtlfreeunicodestring(&src);//釋放動態分配的記憶體。
6.漢字的核心列印輸出
由於dbgprint函式遇到中文字元的unicode_string就會截斷,轉換成
ansi_string列印輸出。
unicode_string src;
ansi_string dst;
rtlinitunicodestring(&src,l」列印漢字」);
rtlunicodestringtoansistring(&dst,&src,true);
dbgprint(「%z」,&dst);
rtlfreeansistring(&dst);
核心字串
實驗任務 給你乙個長度為 n,只包含小寫字母的字串 a0a1a2 an 1 它的核心字串定義 為最短的且包含全部 26 個小寫字母的子串。這樣的子串可能沒有,也可能只有乙個,還有 可能有多個,所以你只需要輸出它的長度,如果沒有這樣的輸出 1 即可。注意 乙個字元 串 a0a1a2 an 1 的子串是...
字串的核心應用
字串有2種表示方式 單引號和雙引號!他們沒有任何區別!比如 python 和 python 是一樣的。但是我覺得組合起來用 s 你好 h 你好你好 s s 特別是sql語句中,直接輸出小學會遇到些問題,所以最用 括起來,如果用 就需要轉義 轉義 i love python 拼接 最好不要用 連線,因...
字元與字串 windows核心程式設計
1,字元編碼 utf 8 unicode transformation format unicode轉換格式 0x0080 以下的字元壓縮為1個位元組 0x0080 0x07ff 之間的字元轉換成2個位元組 0x0800 以上的字元轉換為3個位元組 對 surrogate pair 被寫為4個位元組...