小强's profile小强的共享空间PhotosBlogListsMore Tools Help

小强

No list items have been added yet.

小强的共享空间

This person's network is empty (or maybe they're keeping it private).
October 13

VC中使用macro做按扭

 

一 编辑macro
在VC的按菜单tools里的macro可以对宏进行编辑,录制... 先录了一个输出"//snail add"的然后再编辑吧,用的是VBSCRIPT.


'------------------------------------------------------------------------------
'FILE DESCRIPTION: New Macro File
'------------------------------------------------------------------------------

Sub add()
'DESCRIPTION: A description was not provided.


'Begin Recording
 ActiveDocument.Selection = "//snail add "
 ActiveDocument.Selection = Date
'End Recording
End Sub

这个功能就是在//snail add的后面加上时间,以后只要是我添加的代码我就不用再不断的重复写"//snail add"了

二 添加到按纽
tools-->customize
command里左边category选择macros
左边就出现了你添加的macro,直接拖拽到工具栏选个图标就好了
也可以往menu里拖


 

October 08

VC补遗之Profile篇

原文出处:http://morningspace.51.net/

Profile的作用

  帮助你分析并发现程序运行的瓶颈,找到耗时所在,同时也能帮助你发现不会被执行的代码。从而最终实现程序的优化。

Profile的组成

   Profile包括3个命令行工具:PREP,PROFILE,PLIST。可以以命令行方式运行Profile,其过程是:PREP读取应用程序的可执行文件并生成一个.PBI文件和一个.PBT文件;PROFILE根据.PBI文件,实际运行并分析程序,生成.PBO输出文件;PREP再根据.PBO文件和.PBT文件,生成新的.PBT文件;PLIST根据.PBT文件生成可阅读的输出。

Profile的具体功能

   - Function timing:对程序花费在执行特定函数上的时间进行评估。可以通过Profile对话框激活该功能。分析结果中,Func Time一栏以秒为单位记录了函数运行所花时间,下一栏显示了该函数时间占总运行时间的百分比;Func+Child Time栏记录了函数及其所调用的子函数运行所花的总时间,下一栏显示了前述时间占总运行时间的百分比;Hit Count栏记录函数被调用的次数;Function栏显示函数的名称。

   - Function coverage:记录特定函数是否被调用,可以用来确定代码中的未执行部分。可以通过Profile对话框激活该功能。分析结果列出所有被分析的函数,并使用*号标记执行过的函数。

   - Function counting:记录程序调用特定函数的次数。在Profile对话框中选择Custom,并在Custome Settings中指定fcount.bat(位于VC98\bin目录下)。需要注意的是,在指定fcount.bat所在目录时,最好不要用长文件名的方式,这样有可能出错,比如要将c:\Program Files写成c:\Progra~1。

   - Line counting:记录程序所执行的代码中特定行的次数。在Profile对话框中选择Custom,并在Custome Settings中指定lcount.bat(位于VC98\bin目录下)。该功能使用.EXE中的调试信息启动Profile,因此不需要.MAP文件。分析结果中,Line栏标示源代码的行号,Hit Count栏记录该行执行次数,下一栏显示了该行执行次数占所有代码行执行次数的百分比,Source Line显示了对应的源代码。

   - Line coverage:记录代码中的特定行是否被执行,可以用来确定代码中的未执行部分。可以通过Profile对话框激活该功能。分析结果列出所有被分析的代码行,并使用*号标记执行过的行。由于Line coverage只记录代码行是否被执行过,所以其执行开销要比Line counting小。

  此外,Profile对话框还提供了Merge功能,用以把多次运行Profile之后的统计结果组合起来。如果你正在使用Function coverage功能,则会看到是否测试了所有函数;如果你正在使用Function timing功能,则会看到以往分析与本次分析所有合并运行的累计时间。

IDE环境下Profile的使用

   - 对于涉及函数分析的功能

  • 选择Project->Settings->Link,选择Enable profiling复选框
  • 重建项目
  • 选择Build->Profile,弹出Profile对话框
  • 做必要设置后,选择OK,开始运行程序

   - 对于涉及行分析的功能

  • 选择Project->Settings->Link,选择Enable profiling复选框和Generate debug info复选框
  • 选择Project->Settings->C/C++,选择Line Numbers Only
  • 重建项目
  • 选择Build->Profile,弹出Profile对话框
  • 做必要设置后,选择OK,开始运行程序

配置Profile的三种方式

   - 修改profiler.ini文件

   profiler.ini位于VC98\bin目录下,在其[profiler]段中,你可以指定不参与分析的LIB文件或OBJ文件。比如:

[profiler]
exclude:user32.lib
exclude:gdi32.lib

   - 在Profile对话框中指定选项

  若你选择了Funciton timing、Function coverage或Line coverage选项,则你可以在Advanced settings中指定进一步的范围,比如:你希望Profile只分析SampleApp.cpp文件中特定范围内的代码,可以在Advanced settings中填入, /EXCALL /INC SampleApp.cpp(30-67) 。又如:你希望file1.obj和file2.obj不参与分析,则可以在Advanced settings中填入, /EXC file1.obj /EXC file2.obj 。再如:你希望只描述指定函数,则可以在Advanced settings中填入, /SF ?SampleFunc@@YAXPAH@@ ,紧跟SF参数的是特定函数的修饰符名,获取该名称的最简单的方式是在创建项目时生成的MAP文件中查找。

   SF,EXCALL,EXC,INC都是PREP的命令行参数,有关其他参数的详细说明可以通过在命令行提示符输入PREP /H得到。

   - 编写批命令文件

  可以参考fcount.bat、fcover.bat、ftime.bat、lcount.bat以及lcover.bat

从Profile中输出数据

   PLIST /T命令允许PLIST将.PBT文件内容以制表格式输出到文本文件中,该格式适合输入到电子表格或数据库中。比如:PLIST /T MYPROG > MYPROG.TXT,生成的MYPROG.TXT可以利用profiler.xlm(位于VC98\bin目录下)导入到Microsoft Excel电子表格中。

注意

   - 通常,分析整个程序的意义不大,因为大多数Windows应用程序,主要时间花费在消息等待上,因此精确定位要分析的代码,可以加快Profile的执行速度,提高其分析准确度。在Profile执行期间尽量关闭其他不相干的应用程序。

   - 若启用了远程调试,则不能够从Build菜单中调用Profile功能。

   - 对于inline函数,编译器以实际代码替换函数调用,因此inline函数不生成.MAP文件或CALL指令,所以当执行这样的函数时,Profile将无法得知,花费时间、运行次数等数据都归属于调用该函数的函数。Profile可以提供有关inline函数的行一级的运行次数和覆盖信息。

   - 对于多线程应用程序,Profile的行为取决于你所选择的分析方式,对于Line counting和Line coverage,Profile并未区分线程之间有何不同,它将包含当前运行的所有线程。对于Function timing、Function coverage和Function counting,分析结果取决于线程,你可以用以下方式分析一个独立线程:

  • 将线程的主函数声明为初始函数(用PREP /SF选项)
  • 包含程序中的所有函数(不要使用PREP /EXC选项)

  否则,分析结果很难解释。

October 07

如何修改MSN密码 - Windows Live ID帐户服务

 

使用过一段MSN Messenger & MSN Spaces之后,出于安全的考虑就想修改MSN登陆的密码了。呵呵,当今的安全问题的确很值得一提,而且MSN也建议我们隔一段时间就要修改一下自己的密码,但有的朋友却苦于找不到在哪里修改密码。着急啊,呵呵,其实呢,这个要怪MSN没有明显地告诉我们应该到哪里修改密码……

Windows Live Account —— Windows Live 帐户服务 <- 这里就是管理、修改我们MSN账号信息的地方。

1. 登陆 Windows Live 帐户服务页: https://account.live.com

2. 在“重新设置密码信息”下,单击“密码”后边的“更改”

修改MSN密码

3. 正确输入旧密码后,即可设置新的密码。

修改MSN密码

将密码的有效期设为 72 天 :  如果选中此选项,当密码过期后(72天后),系统会提示你重新设定密码,经常修改密码有助于保护你账号的安全。

 

啰嗦一句: MSN 账号(Windows Live ID)的密码更改后,当你再次登陆 Live Messenger,Live Hotmail,Live Spaces等站点时都应该输入修改后的新密码。

如果你忘记MSN密码了,可以在任何一个 Windows Live 服务的登陆页面上,通过点击“忘记密码”来找回密码。

找回密码

 

此外,平时我们可以通过以下途径进入“帐户”页面:

点击任意 Windows Live 服务页面顶部的 jewel_24_hover ( Windows 徽标),在打开的下拉列表中选择 “帐户”,即可进入Windows Live 帐户服务页。

04

 

September 24

WaitForSingleObject的用法

 

DWORD WaitForSingleObject( 
                     HANDLE hHandle,  
                     DWORD dwMilliseconds				
                  );

        参数 hHandle 是一个事件的句柄,第二个参数 dwMilliseconds 是时间间隔。如果时间是有信号状态返回 WAIT_OBJECT_0 ,如果时间超过 dwMilliseconds 值但时间事件还是无信号状态则返回 WAIT_TIMEOUT

hHandle
可以是下列对象的句柄:
Change notification 
Console input 
Event 
Job 
Memory resource notification 
Mutex 
Process 
Semaphore 
Thread 
Waitable timer 
 

 

        WaitForSingleObject 函数用来检测 hHandle 事件的信号状态,当函数的执行时间超过 dwMilliseconds 就返回,但如果参数 dwMilliseconds INFINITE 时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到 WaitForSingleObject 有返回直才执行后面的代码。在这里举个例子:

先创建一个全局 Event 对象 g_event:

        CEvent g_event;

在程序中可以通过调用 CEvent::SetEvent 设置事件为有信号状态。

 

下面是一个线程函数 MyThreadPro()

UINT CFlushDlg::MyThreadProc( LPVOID pParam ) 
{

     WaitForSingleObject(g_event,INFINITE);
     For(;;)
     
         ………… .

     
     return 0; 

        在这个线程函数中只有设置 g_event 为有信号状态时才执行下面的 for 循环,因为 g_event 是全局变量,所以我们可以在别的线程中通过 g_event. SetEvent 控制这个线程。

        还有一种用法就是我们可以通过 WaitForSingleObject 函数来间隔的执行一个线程函数的函数体

 UINT CFlushDlg::MyThreadProc( LPVOID pParam )

     while(WaitForSingleObject(g_event,MT_INTERVAL) != WAIT_OBJECT_0)
     {
         ………………  
    
     return 0;
 

        在这个线程函数中可以可以通过设置 MT_INTERVAL 来控制这个线程的函数体多久执行一次,当事件为无信号状态时函数体隔 MT_INTERVAL 执行一次,当设置事件为有信号状态时,线程就执行完毕了。

 

September 22

如何查看SQL Server 补丁的版本?


这个题目听起来十分拗口,英文应该这样写“How to find the service pack version installed on SQL Server using”,这个问题我一直在找,SQL Server一直没有像其他软件一样可以直接查看到版本+补丁号的方法,今天到一个老外的网站终于找到了:
有两种方法:
第一步:使用SQL语句查询
select @@version
查询结果如下:
Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)
  May  3 2005 23:18:38
  Copyright (c) 1988-2003 Microsoft Corporation
  Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 2)

其实在C:\Program Files\Microsoft SQL Server\MSSQL\Binn\sqlservr.exe
点击鼠标右键查看版本也能得到,不过信息比较简单而已。8.00.2039就代表安装的SQL Server的版本了。对应以下的表格,可以查出来具体对应的补丁版本。8.00.2039表示安装了SP4,8.00.760表示安装了SP3。
 
第二步:对照表格查找具体的补丁版本
SQL Server Versions
--------------------------------------------------------------------------------
6.50.201 SQL Server 6.5 RTM
6.50.213 SQL Server 6.5 with Service Pack 1
6.50.240 SQL Server 6.5 with Service Pack 2
6.50.258 SQL Server 6.5 with Service Pack 3
6.50.281 SQL Server 6.5 with Service Pack 4
6.50.415 SQL Server 6.5 with Service Pack 5
6.50.416 SQL Server 6.5 with Service Pack 5a
7.00.623 SQL Server 7.0 / MSDE 1.0 RTM
7.00.699 SQL Server 7.0 SP1 July 1999
7.00.842 SQL Server 7.0 SP2 March 20th, 2000
7.00.961 SQL Server 7.0 SP3 December 15th, 2000
7.00.1063 SQL Server 7.0 SP4
8.00.194 SQL Server 2000 RTM
8.00.384 SQL Server 2000 SP1
8.00.534 SQL Server 2000 SP2 November 30th, 2001
8.00.760 SQL Server 2000 SP3
8.00.2039 SQL Server 2000 SP4
--------------------------------------------------------------------------------
更多的版本对照表:
For SQL Server 8
Main Releases
@@version Version and Service Pack
8.00.2039 Service Pack 4
8.00.760 Service Pack 3
8.00.534 Service Pack 2
8.00.384 Service Pack 1
8.00.194 RTM
All Releases
@@version Version and Service Pack
8.00.2039 Service Pack 4
8.00.760 Service Pack 3
8.00.686 SP 2 + Q316333
8.00.679 SP 2 + Q316333
8.00.665 SP 2 + Q316333
8.00.655 SP 2 + Q316333
8.00.650 SP 2 + Q316333
8.00.644 SP 2 + Q324186
8.00.608 SP 2 + Q316333/Q356326/Q356938
8.00.578 SP 2 + Q316333
8.00.534 Service Pack 2
8.00.532 Service Pack 2 Beta
8.00.452 SP 1 + Q308547
8.00.444 SP 1 + Q308547/Q307655
8.00.443 SP 1 + Q307538
8.00.428 SP 1 + Q304850
8.00.384 Service Pack 1
8.00.287 Q297209
8.00.251 Q300194
8.00.250 Q291683
8.00.249 Q288122
8.00.239 Q285290
8.00.233 Q282416
8.00.231 Q282279
8.00.226 Q278239
8.00.225 Q281663
8.00.223 Q280380
8.00.222 Q281769
8.00.218 Q279183
8.00.217 Q279293/Q279296
8.00.211 Q276329
8.00.210 Q275900
8.00.205 Q274330
8.00.204 Q274329
8.00.194 RTM(SQL Server 8 with no service pack applied)
--------------------------------------------------------------------------------
For SQL Server 7
Main Releases
@@version Version and Service Pack
7.00.1063 SQL Server 7 with Service Pack 4
7.00.961 SQL Server 7 with Service Pack 3
7.00.842 SQL Server 7 with Service Pack 2
7.00.699 SQL Server 7 with Service Pack 1
7.00.623 SQL Server 7 with no service pack applied
--------------------------------------------------------------------------------
For SQL Server 6.5
Main Releases
@@version Version and Service Pack
6.50.479 SQL Server 6.5 with Service Pack 5a (updated)
6.50.416 SQL Server 6.5 with Service Pack 5a.
6.50.415 SQL Server 6.5 with Service Pack 5
6.50.281 SQL Server 6.5 with Service Pack 4
6.50.258 SQL Server 6.5 with Service Pack 3
6.50.240 SQL Server 6.5 with Service Pack 2
6.50.213 SQL Server 6.5 with Service Pack 1
6.50.201 SQL Server 6.5 with no service pack applied
--------------------------------------------------------------------------------
For SQL Server 6
Main Releases
@@version Version and Service Pack
6.00.151 SQL Server 6 with Service Pack 3
6.00.139 SQL Server 6 with Service Pack 2
6.00.124 SQL Server 6 with Service Pack 1
6.00.121 SQL Server 6 with no service pack applied
 
September 12

SQL Server错误日志: SQL Server has encountered 1 occurrence(s) of IO requests...


SQL Server错误日志: SQL Server has encountered 1 occurrence(s) of IO requests taking longer than 15 seconds to complete on file [E:\ABOSS\DAT\ET2000.LOG] in database [ET2000] (7).  The OS file handle is 0x00000418.  The offset of the latest long IO is: 0x00000035e2ba00

[Cause]
This informational message indicates that the current load may be experiencing one of the following conditions:
? The workload is exceeding the I/O path capabilities.
? The workload is exceeding the current system capabilities.
? The I/O path has malfunctioning software; perhaps a firmware or a driver issue.
? The I/O path has malfunctioning hardware components.

A database management system (DBMS), such as SQL Server, relies on the timeliness of file input and output (I/O) operations. Any one of the following items may create stuck or stalled I/O problems. These problems can quickly have an adverse affect on SQL Server responsiveness and performance:
? Faulty hardware
? Hardware that is not configured correctly
? Firmware settings
? Filter drivers
? Compression
? Bugs
? Other conditions in the I/O path

[Resolution]
Indexes
Frequently, bursts of I/O can occur because an index is missing. This behavior can push the I/O path heavily. You can run the Index Turning Wizard (ITW) to resolve I/O pressure on the system.

September 04

C++关键字explicit

   
    explicit和构造函数一起使用.
    explicit constructor指明构造函数只能显示使用,目的是为了防止不必要的隐式转化.
    举个例子:  
    有这样一段代码:    
    class A  
    {  
          public:  
                A(int);  
          private:  
                int num;
    };
    int Test(const A&)   //一个应用函数
    {
          ...
    }
    Test(2);   //正确
   
    过程是这样的: 编译器知道传的值是int而函数需要的是A类型,但它也同时知道调用A的构造函数将int转换成一个合适的A,所以才有上面成功的调用. 换句话说,编译器处理这个调用时的情形类似下面这样:  
    const A temp(2);       //从2产生一个临时A对象  
    Test(temp);            //调用函数
     
    如果代码写成如下样子:
    class A  
    {  
          public:  
                explicit A(int);
          private:  
                int num;
    };  
    int Test(const A&)   //一个应用函数  
    {  
          ...  
    }  
    Test(2);   //失败,不能通过隐式类型转换将int类型变量构造成A类型变量
 
August 29

MFC应用程序中指针的使用


1) 在View中获得Doc指针
2) 在App中获得MainFrame指针
3) 在View中获得MainFrame指针
4) 获得View(已建立)指针
5) 获得当前文档指针
6) 获得状态栏与工具栏指针
7) 获得状态栏与工具栏变量
8) 在Mainframe获得菜单指针
9) 在任何类中获得应用程序类
10) 从文档类取得视图类的指针(1)
11) 在App中获得文档模板指针
12) 从文档模板获得文档类指针
13) 在文档类中获得文档模板指针
14) 从文档类取得视图类的指针(2)
15) 从一个视图类取得另一视图类的指针


VC中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与操作。其实这些内容基本上是每本VC学习工具书上必讲的内容,而且通过MSDN很多问题都能解决。
下面文字主要是个人在编程中指针使用的一些体会,说的不当的地方请指正。
一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。
下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。

1) 在View中获得Doc指针

CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。
2) 在App中获得MainFrame指针
CWinApp 中的 m_pMainWnd变量就是MainFrame的指针
也可以:
CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
3) 在View中获得MainFrame指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
4) 获得View(已建立)指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
CyouView *pView=(CyouView *)pMain->GetActiveView();
5) 获得当前文档指针
CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();
6) 获得状态栏与工具栏指针
CStatusBar * pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar * pToolBar=(CtoolBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
7) 如果框架中加入工具栏和状态栏变量还可以这样
(CMainFrame *)GetParent()->m_wndToolBar;
(CMainFrame *)GetParent()->m_wndStatusBar;
8) 在Mainframe获得菜单指针
CMenu *pMenu=m_pMainWnd->GetMenu();
9) 在任何类中获得应用程序类
用MFC全局函数AfxGetApp()获得。

10) 从文档类取得视图类的指针
我是从http://download.cqcnc.com/soft/program/article/vc/vc405.html学到的,从文档获得视图类指针目的一般为了控制同一文档的多个视图的定位问题,我的体会特别是文字处理CEditView当产生多个视图类时,这个功能是非常需要的。
CDocument类提供了两个函数用于视图类的定位:
GetFirstViewPosition()和GetNextView()
virtual POSITION GetFirstViewPosition() const;
virtual CView* GetNextView(POSITION& rPosition) const;
注意:GetNextView()括号中的参数用的是引用方式,因此执行后值可能改变。
GetFirstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一个POSITION类型值),GetNextView()有两个功能:返回下一个视图类的指针以及用引用调用的方式来改变传入的POSITION类型参数的值。很明显,在Test程序中,只有一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定义一个POSITION结构变量来辅助操作):
CTestView* pTestView;
POSITION pos=GetFirstViewPosition();
pTestView=GetNextView(pos);
这样,便可到了CTestView类的指针pTestView.执行完几句后,变量pos=NULL,因为没有下一个视图类,自然也没有下一个视图类的POSITION.但是这几条语句太简单,不具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个指定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指向的是否某个类的实例时,可用IsKindOf()成员函数时行检查,如:
pView->IsKindOf(RUNTIME_CLASS(CTestView));
即可检查pView所指是否是CTestView类。

有了以上基础,我们已经可以从文档类取得任何类的指针。为了方便,我们将其作为一个文档类的成员函数,它有一个参数,表示要获得哪个类的指针。实现如下:
CView* CTestDoc::GetView(CRuntimeClass* pClass)
{
	CView* pView;
	POSITION pos=GetFirstViewPosition();

	while(pos!=NULL){
		pView=GetNextView(pos);
		if(!pView->IsKindOf(pClass))
		break;
	}

	if(!pView->IsKindOf(pClass)){
		AfxMessageBox("Connt Locate the View.\r\n http://www.VCKBASE.com");
		return NULL;
	}

	return pView;
}

其中用了两次视图类的成员函数IsKindOf()来判断,是因为退出while循环有三种可能:

1.pos为NULL,即已经不存在下一个视图类供操作;
2.pView已符合要求。

1和2同是满足。这是因为GetNextView()的功能是将当前视图指针改变成一个视图的位置同时返回当前视图指针,因此pos是pView的下一个视图类的POSITION,完全有可能既是pos==NULL又是pView符合需要。当所需的视图是最后一个视图是最后一个视图类时就如引。因此需采用两次判断。
使用该函数应遵循如下格式(以取得CTestView指针为例):
CTestView* pTestView=(CTestView*)GetView(RUNTIME_CLASS(CTestView));
RUNTIME_CLASS是一个宏,可以简单地理解它的作用:将类的名字转化为CRuntimeClass为指针。
至于强制类型转换也是为了安全特性考虑的,因为从同一个基类之间的指针类型是互相兼容的。这种强制类型转换也许并不必要,但能避免一些可能出现的麻烦。

3.从一个视图类取得另一视图类的指针 综合1和2,很容易得出视图类之间互相获得指针的方法:就是用文档类作中转,先用1的方法得到文档类的指针,再用2的方法,以文档类的视图定位函数取得另一个视图类。同样,可以实现成一个函数:
(假设要从CTestAView中取得指向其它视图类的指针)
CView* CTestAView::GetView(CRuntimeClass* pClass)
{
	CTestDoc* pDoc=(CTestDoc*)GetDocument();
	CView* pView;
	POSITION pos=pDoc->GetFirstViewPosition();
	while(pos!=NULL){
		pView=pDoc->GetNextView(pos);
		if(!pView->IsKindOf(pClass))
		break;
	}
	if(!pView->IsKindOf(pClass)){
		AfxMessageBox("Connt Locate the View.");
		return NULL;
	}

	return pView;
}
这个函数和2中的GetView()相比,一是多了第一句以取得文档类指针,二是在GetFirstViewPosition()和GetNextView()前加上了文档类指针,以表示它们是文档类成员函数。
有了此函数;当要从CTestAView中取得CTestBView的指针时,只需如下:
CTestBView* pTestbView=(CTestView*)GetView(RUNTIME_CLASS(CTestBView));
11)对于单文档中也可以加入多个文档模板,但是一般的开发就使用MDI方式开发多文档模板,其方法与上述视图的获取方法很接近,这里稍做解释,如果不清楚,请查阅MSDN,(以下四个内容(11、12、13、14)来源:http://sanjianxia.myrice.com/vc/vc45.htm

可以用CWinApp::GetFirstDocTemplatePostion获得应用程序注册的第一个文档模板的位置;
利用该值来调用CWinApp::GetNextDocTemplate函数,获得第一个CDocTemplate对象指针。
POSITION GetFirstDocTemplate( ) const; 
CDocTemplate *GetNextDocTemplate( POSITION & pos ) const;
第二个函数返回由pos 标识的文档模板。POSITION是MFC定义的一个用于迭代或对象指针检索的值。通过这两个函数,应用程序可以遍历整个文档模板列表。如果被检索的文档模板是模板列表中的最后一个,则pos参数被置为NULL。

12)一个文档模板可以有多个文档,每个文档模板都保留并维护了一个所有对应文档的指针列表。
用CDocTemplate::GetFirstDocPosition函数获得与文档模板相关的文档集合中第一个文档的位置,并用POSITION值作为CDocTemplate::GetNextDoc的参数来重复遍历与模板相关的文档列表。函数原形为:
viaual POSITION GetFirstDocPosition( ) const = 0; 
visual CDocument *GetNextDoc(POSITION & rPos) const = 0;  
如果列表为空,则rPos被置为NULL.

13)在文档中可以调用CDocument::GetDocTemplate获得指向该文档模板的指针。函数原形如下:
CDocTemplate * GetDocTemplate ( ) const; 
如果该文档不属于文档模板管理,则返回值为NULL。

14)一个文档可以有多个视。每一个文档都保留并维护一个所有相关视的列表。CDocument::AddView将一个视连接到文档上,将该视加入到文档相联系的视的列表中,并将视的文档指针指向该文档。当有File/New、File/Open、Windows/New或Window/Split的命令而将一个新创建的视的对象连接到文档上时, MFC会自动调用该函数,框架通过文档/视的结构将文档和视联系起来。当然,程序员也可以根据自己的需要调用该函数。
Virtual POSITION GetFirstViewPosition( ) const; 
Virtual CView * GetNextView( POSITION &rPosition) cosnt; 
应用程序可以调用CDocument::GetFirstViewPosition返回与调用文档相联系的视的列表中的第一个视的位置,并调用CDocument::GetNextView返回指定位置的视,并将rPositon的值置为列表中下一个视的POSITION值。如果找到的视为列表中的最后一个视,则将rPosition置为NULL.

15)从一个视图类取得另一视图类的指针
这个应用在多视的应用程序中很多见,一般如果自己在主程序或者主框架中做好变量记号,也可以获得,还有比较通用的就是用文档类作中转,以文档类的视图遍历定位,取得另一个视图类。这个功能从本文第10项中可以得到。

这些资料大部分都是从网上和MSDN中获得的,写这个文档就是为了让大家不用再寻找,列出标题,可操作性更强。
August 28

关于DLL的调用约定


  动态库输出函数的约定有两种:调用约定和名字修饰约定。

1) 调用约定(Calling convention):决定函数参数传送时入栈和出栈的顺序,由调用者还是被调用者把参数弹出栈,以及编译器用来识别函数名字的修饰约定。

函数调用约定有多种,这里简单说一下:

1、__stdcall 调用约定相当于16位动态库中经常使用的 PASCAL 调用约定。在32位的 VC++5.0 中PASCAL 调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal 外,__fortran 和__syscall也不被支持),取而代之的是 __stdcall 调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。
  _stdcall 是 Pascal 程序的缺省调用方式,通常用于 Win32 API 中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC 将函数编译后会在函数名前面加上下划线前缀,在函数名后加上 "@" 和参数的字节数。
2、C 调用约定(即用__cdecl 关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。
  _cdecl 是 C 和 C++ 程序缺省的调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用 _stdcall 函数的大。函数采用从右到左的压栈方式。VC 将函数编译后会在函数名前面加上下划线前缀。 它是 MFC 缺省调用约定。
3、__fastcall 调用约定是 "人" 如其名,它的主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用 ECX 和 EDX 传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在函数名修饰约定方面,它和前两者均不同。
  _fastcall方式的函数采用寄存器传递参数,VC 将函数编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。
4、thiscall 仅仅应用于 "C++" 成员函数。this 指针存放于 CX 寄存器,参数从右到左压。thiscall 不是关键词,因此不能被程序员指定。
5、naked call采用 1-4 的调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。naked call不产生这样的代码。naked call不是类型修饰符,故必须和_declspec 共同使用。
  关键字 __stdcall、__cdecl 和 __fastcall 可以直接加在要输出的函数前,也可以在编译环境的 Setting...\C/C++ \Code Generation 项选择。当加在输出函数前的关键字与编译环境中的选择不同时,直接加在输出函数前的关键字有效。它们对应的命令行参数分别为/Gz、/Gd 和 /Gr。缺省状态为/Gd,即__cdecl。
  要完全模仿 PASCAL 调用约定首先必须使用 __stdcall 调用约定,至于函数名修饰约定,可以通过其它方法模仿。还有一个值得一提的是 WINAPI 宏,Windows.h 支持该宏,它可以将出函数翻译成适当的调用约定,在 WIN32 中,它被定义为 __stdcall。使用 WINAPI 宏可以创建自己的 APIs。

2) 名字修饰约定

1、修饰名(Decoration name)
  "C" 或者 "C++" 函数在内部(编译和链接)通过修饰名识别。修饰名是编译器在编译函数定义或者原型时生成的字符串。有些情况下使用函数的修饰名是必要的,如在模块定义文件里头指定输出"C++"重载函数、构造函数、析构函数,又如在汇编代码里调用"C""或"C++"函数等。
  修饰名由函数名、类名、调用约定、返回类型、参数等共同决定。

2、名字修饰约定随调用约定和编译种类(C或C++)的不同而变化。函数名修饰约定随编译种类和调用约定的不同而不同,下面分别说明。

a、C编译时函数名修饰约定规则:
  __stdcall 调用约定在输出函数名前加上一个下划线前缀,后面加上一个"@"符号和其参数的字节数,格式为 _functionname@number
  __cdecl调用约定仅在输出函数名前加上一个下划线前缀,格式为 _functionname。
  __fastcall调用约定在输出函数名前加上一个"@"符号,后面也是一个"@"符号和其参数的字节数,格式为@functionname@number。
  它们均不改变输出函数名中的字符大小写,这和PASCAL调用约定不同,PASCAL约定输出的函数名无任何修饰且全部大写。

b、C++编译时函数名修饰约定规则:

__stdcall调用约定:

1、以"?"标识函数名的开始,后跟函数名;
2、函数名后面以"@@YG"标识参数表的开始,后跟参数表;
3、参数表以代号表示:

X——void,
D——char,
E——unsigned char,
F——short,
H——int,
I——unsigned int,
J——long,
K——unsigned long,
M——float,
N——double,
_N——bool,
....

  PA——表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以"0"代替,一个"0"代表一次重复;
4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;
5、参数表后以"@Z"标识整个名字的结束,如果该函数无参数,则以"Z"标识结束。
  其格式为"?functionname@@YG*****@Z"或"?functionname@@YG*XZ",
例如

          int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z
          void Test2()                       -----“?Test2@@YGXXZ

__cdecl调用约定:
  规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的"@@YG"变为"@@YA"。

__fastcall调用约定:
  规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的"@@YG"变为"@@YI"。

VC++对函数的省缺声明是"__cedcl",将只能被C/C++调用。

 

#ifdef __cplusplus 倒底是什么意思?


时常在cpp的代码之中看到这样的代码:

#ifdef __cplusplus
extern "C" {
#endif
//一段代码
#ifdef __cplusplus
}
#endif

  这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。
  要明白为何使用extern "C",还得从cpp中对函数的重载处理开始说起。在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等。而在C中,只是简单的函数名字而已,不会加入其他的信息。也就是说:C++和C对产生的函数名字的处理是不一样的。
  比如下面的一段简单的函数,我们看看加入和不加入extern "C"产生的汇编代码都有哪些变化:
int f(void)
{
      return 1;
}
  在加入extern "C"的时候产生的汇编代码是:
.file "test.cxx"
.text
.align 2
.globl _f
.def _f; .scl 2; .type 32; .endef
_f:
pushl %ebp
movl %esp, %ebp
movl $1, %eax
popl %ebp
ret
  但是不加入了extern "C"之后: 
.file "test.cxx"
.text
.align 2
.globl __Z1fv
.def __Z1fv; .scl 2; .type 32; .endef
__Z1fv:
pushl %ebp
movl %esp, %ebp
movl $1, %eax
popl %ebp
ret
  两段汇编代码同样都是使用gcc -S命令产生的,所有的地方都是一样的,唯独是产生的函数名,一个是_f,一个是__Z1fv。
  明白了加入与不加入extern "C"之后对函数名称产生的影响,我们继续我们的讨论:为什么需要使用extern "C"呢?C++之父在设计C++之时,考虑到当时已经存在了大量的C代码,为了支持原来的C代码和已经写好C库,需要在C++中尽可能的支持C,而extern "C"就是其中的一个策略。
  试想这样的情况:一个库文件已经用C写好了而且运行得很良好,这个时候我们需要使用这个库文件,但是我们需要使用C++来写这个新的代码。如果这个代码使用的是C++的方式链接这个C库文件的话,那么就会出现链接错误。我们来看一段代码:首先,我们使用C的处理方式来写一个函数,也就是说假设这个函数当时是用C写成的:
//f1.c
extern "C"
{
      void f1()
      {
            return;
      }
}
  编译命令是:gcc -c f1.c -o f1.o 产生了一个叫f1.o的库文件。再写一段代码调用这个f1函数:
//test.cxx
//这个extern表示f1函数在别的地方定义,这样可以通过编译。但是链接的时候还是需要链接上原来的库文件。
extern void f1();
int main()
{
      f1();
      return 0;
}
  通过gcc -c test.cxx -o test.o 产生一个叫test.o的文件。然后,我们使用gcc test.o f1.o来链接两个文件,可是出错了,错误的提示是: test.o(.text + 0x1f):test.cxx: undefine reference to 'f1()'
  也就是说,在编译test.cxx的时候编译器是使用C++的方式来处理f1()函数的,但是实际上链接的库文件却是用C的方式来处理函数的,所以就会出现链接过不去的错误:因为链接器找不到函数。
  因此,为了在C++代码中调用用C写成的库文件,就需要用extern "C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。
  比如,现在我们有了一个C库文件,它的头文件是f.h,产生的lib文件是f.lib,那么我们如果要在C++中使用这个库文件,我们需要这样写:
extern "C"
{
      #include "f.h"
}
  回到上面的问题,如果要改正链接错误,我们需要这样子改写test.cxx:
extern "C"
{
      extern void f1();
}
int main()
{
      f1();
      return 0;
}
  重新编译并且链接就可以过去了。

总结:
  C和C++对函数的处理方式是不同的。extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。

 

August 26

VC中的消息

消息,就是Windows向应用程序发出的通知。事件,就是你对硬件设备的操作。例如,当你单击鼠标、敲击键盘等,这本身就是一个事件的发生,Windows会捕捉到你操作硬件的这些事件,然后会产生对应的消息,并将消息放入消息队列,最后应用程序从消息队列按顺序取走属于自己的消息,将消息和对应函数联系起来。这就是面向对象编程的基本原理。
消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows单元中是这样声明的:

type
TMsg = packed record
hwnd: HWND; //窗口句柄
message: UINT;//消息常量标识符
wParam: WPARAM ;// 32位消息的特定附加信息
lParam: LPARAM ;// 32位消息的特定附加信息
time: DWORD;//消息创建时的时间
pt: TPoint; //消息创建时的鼠标位置
end ;

消息中有什么?
是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可
视对象的句柄(窗口、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也
可以是自定义的常量。
wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
lParam 通常是一个指向内存中数据的指针。由于WParam、lParam和Pointer都是32位的,因此,它们之间可以相互转换。

WM_NULL =$0000 //
WM_CREATE =$0001 //应用程序创建一个窗口
WM_DESTROY = $0002 //一个窗口被销毁
WM_MOVE = $0003 //移动一个窗口
WM_SIZE= $0005 //改变一个窗口的大小
WM_ACTIVATE= $0006 //一个窗口被激活或失去激活状态;
WM_SETFOCUS= $0007 //获得焦点后
WM_KILLFOCUS= $0008 //失去焦点
WM_ENABLE= $000A //改变enable状态
WM_SETREDRAW= $000B //设置窗口是否能重画
WM_SETTEXT= $000C //应用程序发送此消息来设置一个窗口的文本
WM_GETTEXT = $000D //应用程序发送此消息来复制对应窗口的文本到缓冲区
WM_GETTEXTLENGTH = $000E //得到与一个窗口有关的文本的长度(不包含空字符)
WM_PAINT = $000F //要求一个窗口重画自己
WM_CLOSE = $0010 //当一个窗口或应用程序要关闭时发送一个信号
WM_QUERYENDSESSION= $0011 //当用户选择结束对话框或程序自己调用ExitWindows函数
WM_QUIT= $0012 //用来结束程序运行或当程序调用postquitmessage函数
WM_QUERYOPEN = $0013 //当用户窗口恢复以前的大小位置时,把此消息发送给某个图标
WM_ERASEBKGND = $0014 //当窗口背景必须被擦除时(例在窗口改变大小时)
WM_SYSCOLORCHANGE = $0015 //当系统颜色改变时,发送此消息给所有顶级窗口
WM_ENDSESSION = $0016 // 当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束
WM_SYSTEMERROR = $0017 //
WM_SHOWWINDOW= $0018 //当隐藏或显示窗口是发送此消息给这个窗口
WM_ACTIVATEAPP = $001C //发此消息给应用程序哪个窗口是激活的,哪个是非激活的;
WM_FONTCHANGE= $001D //当系统的字体资源库变化时发送此消息给所有顶级窗口
WM_TIMECHANGE= $001E //当系统的时间变化时发送此消息给所有顶级窗口
WM_CANCELMODE= $001F //发送此消息来取消某种正在进行的摸态(操作)
WM_SETCURSOR = $0020 //如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口
WM_MOUSEACTIVATE = $0021 //当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口
WM_CHILDACTIVATE = $0022 //发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小
WM_QUEUESYNC= $0023 //此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息
WM_GETMINMAXINFO= $0024 //此消息发送给窗口当它将要改变大小或位置;
WM_PAINTICON = $0026 //发送给最小化窗口当它图标将要被重画
WM_ICONERASEBKGND = $0027 //此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画
WM_NEXTDLGCTL = $0028 //发送此消息给一个对话框程序去更改焦点位置
WM_SPOOLERSTATUS= $002A //每当打印管理列队增加或减少一条作业时发出此消息
WM_DRAWITEM= $002B //当button,combobox,listbox,menu的可视外观改变时发送此消息给这些空件的所有者
WM_MEASUREITEM= $002C //当button, combo box, list box, list view control, or menu item 被创建时发送此消息给控件的所有者
WM_DELETEITEM = $002D // 当the list box 或combo box 被销毁或当某些项被删除通过LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT 消息
WM_VKEYTOITEM = $002E //此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息
WM_CHARTOITEM = $002F //此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息
WM_SETFONT= $0030 //当绘制文本时程序发送此消息得到控件要用的颜色
WM_GETFONT= $0031 //应用程序发送此消息得到当前控件绘制文本的字体
WM_SETHOTKEY= $0032 //应用程序发送此消息让一个窗口与一个热键相关连
WM_GETHOTKEY= $0033 //应用程序发送此消息来判断热键与某个窗口是否有关联
WM_QUERYDRAGICON= $0037 //此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能
返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标
WM_COMPAREITEM= $0039 //发送此消息来判定combobox或listbox新增加的项的相对位置
WM_GETOBJECT= $003D //WM_COMPACTING = $0041 //显示内存已经很少了
WM_WINDOWPOSCHANGING = $0046 //发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数
WM_WINDOWPOSCHANGED = $0047 //发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数
WM_POWER= $0048 //(适用于16位的windows)当系统将要进入暂停状态时发送此消息
WM_COPYDATA = $004A //当一个应用程序传递数据给另一个应用程序时发送此消息
WM_CANCELJOURNAL= $004B //当某个用户取消程序日志激活状态,提交此消息给程序
WM_NOTIFY = $004E //当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口
WM_INPUTLANGCHANGEREQUEST = $0050 //当用户选择某种输入语言,或输入语言的热键改变
WM_INPUTLANGCHANGE= $0051 //当平台现场已经被改变后发送此消息给受影响的最顶级窗口
WM_TCARD= $0052 //当程序已经初始化windows帮助例程时发送此消息给应用程序
WM_HELP = $0053 //此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就
发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口
WM_USERCHANGED= $0054 //当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体
设置信息,在用户更新设置时系统马上发送此消息;
WM_NOTIFYformAT = $0055 //公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构
在WM_NOTIFY消息,使用此控件能使某个控件与它的父控件之间进行相互通信
WM_CONTEXTMENU= $007B //当用户某个窗口中点击了一下右键就发送此消息给这个窗口
WM_styleCHANGING= $007C //当调用SETWINDOWLONG函数将要改变一个或多个窗口的风格时发送此消息给那个窗口
WM_styleCHANGED = $007D //当调用SETWINDOWLONG函数一个或多个窗口的风格后发送此消息给那个窗口
WM_DISPLAYCHANGE= $007E //当显示器的分辨率改变后发送此消息给所有的窗口
WM_GETICON= $007F //此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;
WM_SETICON= $0080 //程序发送此消息让一个新的大图标或小图标与某个窗口关联;
WM_NCCREATE = $0081 //当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送;
WM_NCDESTROY= $0082 //此消息通知某个窗口,非客户区正在销毁
WM_NCCALCSIZE = $0083 //当某个窗口的客户区域必须被核算时发送此消息
WM_NCHITTEST= $0084 //移动鼠标,按住或释放鼠标时发生
WM_NCPAINT= $0085 //程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;
WM_NCACTIVATE= $0086 //此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态;
WM_GETDLGCODE= $0087 //发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件
通过响应WM_GETDLGCODE消息,应用程序可以把他当成一个特殊的输入控件并能处理它
WM_NCMOUSEMOVE = $00A0 //当光标在一个窗口的非客户区内移动时发送此消息给这个窗口//非客户区为:窗体的标题栏及窗
的边框体
WM_NCLBUTTONDOWN= $00A1 //
当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息
WM_NCLBUTTONUP= $00A2 //当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息;
WM_NCLBUTTONDBLCLK= $00A3 //当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息
WM_NCRBUTTONDOWN= $00A4 //当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息
WM_NCRBUTTONUP= $00A5 //当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息
WM_NCRBUTTONDBLCLK= $00A6 //当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息
WM_NCMBUTTONDOWN= $00A7 //当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_NCMBUTTONUP= $00A8 //当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_NCMBUTTONDBLCLK= $00A9 //当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_KEYFIRST = $0100 //
WM_KEYDOWN= $0100 //按下一个键
WM_KEYUP= $0101 //释放一个键
WM_CHAR = $0102 //按下某键,并已发出WM_KEYDOWN,WM_KEYUP消息
WM_DEADCHAR = $0103 //当用translatemessage函数翻译WM_KEYUP消息时发送此消息给拥有焦点的窗口
WM_SYSKEYDOWN = $0104 //当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口;
WM_SYSKEYUP = $0105 //当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口
WM_SYSCHAR= $0106 //当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口
WM_SYSDEADCHAR= $0107 //当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口
WM_KEYLAST= $0108 //
WM_INITDIALOG = $0110 //在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务
WM_COMMAND= $0111 //当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译
WM_SYSCOMMAND = $0112 //当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息
WM_TIMER= $0113 //发生了定时器事件
WM_HSCROLL= $0114 //当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件
WM_VSCROLL= $0115 //当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件WM_INITMENU = $0116 //
当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许
程序在显示前更改菜单
WM_INITMENUPOPUP= $0117 //当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要
改变全部
WM_MENUSELECT = $011F //当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)
WM_MENUCHAR = $0120 //当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者;
WM_ENTERIDLE= $0121 //当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待
WM_MENURBUTTONUP= $0122 //
WM_MENUDRAG = $0123 //
WM_MENUGETOBJECT= $0124 //
WM_UNINITMENUPOPUP= $0125 //
WM_MENUCOMMAND= $0126 //
WM_CHANGEUISTATE= $0127 //
WM_UPDATEUISTATE= $0128 //
WM_QUERYUISTATE = $0129 //
WM_CTLCOLORMSGBOX = $0132 //在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色
WM_CTLCOLOREDIT = $0133 //当一个编辑型控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色
WM_CTLCOLORLISTBOX= $0134 //当一个列表框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色
WM_CTLCOLORBTN= $0135 //当一个按钮控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色
WM_CTLCOLORDLG= $0136 //当一个对话框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色
WM_CTLCOLORSCROLLBAR= $0137 //当一个滚动条控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色
WM_CTLCOLORSTATIC = $0138 //当一个静态控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色
WM_MOUSEFIRST = $0200 //
WM_MOUSEMOVE= $0200 //移动鼠标
WM_LBUTTONDOWN= $0201 //按下鼠标左键
WM_LBUTTONUP= $0202 //释放鼠标左键
WM_LBUTTONDBLCLK= $0203 //双击鼠标左键
WM_RBUTTONDOWN= $0204 //按下鼠标右键
WM_RBUTTONUP= $0205 //释放鼠标右键
WM_RBUTTONDBLCLK= $0206 //双击鼠标右键
WM_MBUTTONDOWN= $0207 //按下鼠标中键
WM_MBUTTONUP= $0208 //释放鼠标中键
WM_MBUTTONDBLCLK= $0209 //双击鼠标中键
WM_MOUSEWHEEL = $020A //当鼠标轮子转动时发送此消息个当前有焦点的控件
WM_MOUSELAST= $020A //
WM_PARENTNOTIFY = $0210 //当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口
WM_ENTERMENULOOP= $0211 //发送此消息通知应用程序的主窗口that已经进入了菜单循环模式
WM_EXITMENULOOP = $0212 //发送此消息通知应用程序的主窗口that已退出了菜单循环模式
WM_NEXTMENU = $0213 //
WM_SIZING = 532 //当用户正在调整窗口大小时发送此消息给窗口;通过此消息应用程序可以监视窗口大小和位置
也可以修改他们
WM_CAPTURECHANGED = 533 //发送此消息给窗口当它失去捕获的鼠标时;
WM_MOVING = 534 //当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置
也可以修改他们;
WM_POWERBROADCAST = 536 //此消息发送给应用程序来通知它有关电源管理事件;
WM_DEVICECHANGE = 537 //当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序
WM_IME_STARTCOMPOSITION= $010D //
WM_IME_ENDCOMPOSITION= $010E //
WM_IME_COMPOSITION = $010F //
WM_IME_KEYLAST = $010F //
WM_IME_SETCONTEXT= $0281 //
WM_IME_NOTIFY= $0282 //
WM_IME_CONTROL = $0283 //
WM_IME_COMPOSITIONFULL = $0284 //
WM_IME_SELECT= $0285 //
WM_IME_CHAR= $0286 //
WM_IME_REQUEST = $0288 //
WM_IME_KEYDOWN = $0290 //
WM_IME_KEYUP = $0291 //
WM_MDICREATE= $0220 //应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口
WM_MDIDESTROY = $0221 //应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口
WM_MDIACTIVATE= $0222 //应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到
此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它;
WM_MDIRESTORE = $0223 //程序发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小
WM_MDINEXT= $0224 //程序发送此消息给MDI客户窗口激活下一个或前一个窗口
WM_MDIMAXIMIZE= $0225 //程序发送此消息给MDI客户窗口来最大化一个MDI子窗口;
WM_MDITILE= $0226 //程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口
WM_MDICASCADE = $0227 //程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口
WM_MDIICONARRANGE = $0228 //程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口
WM_MDIGETACTIVE = $0229 //程序发送此消息给MDI客户窗口来找到激活的子窗口的句柄
WM_MDISETMENU = $0230 //程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单
WM_ENTERSIZEMOVE= $0231 //
WM_EXITSIZEMOVE = $0232 //
WM_DROPFILES= $0233 //
WM_MDIREFRESHMENU = $0234 //
WM_MOUSEHOVER = $02A1 //
WM_MOUSELEAVE = $02A3 //
WM_CUT= $0300 //程序发送此消息给一个编辑框或combobox来删除当前选择的文本
WM_COPY = $0301 //程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板
WM_PASTE= $0302 //程序发送此消息给editcontrol或combobox从剪贴板中得到数据
WM_CLEAR= $0303 //程序发送此消息给editcontrol或combobox清除当前选择的内容;
WM_UNDO = $0304 //程序发送此消息给editcontrol或combobox撤消最后一次操作
WM_RENDERformAT = $0305;//
WM_RENDERALLformATS = $0306 //
WM_DESTROYCLIPBOARD = $0307 //当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者
WM_DRAWCLIPBOARD= $0308 //当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来
显示剪贴板的新内容;
WM_PAINTCLIPBOARD = $0309 //当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;
WM_VSCROLLCLIPBOARD = $030A //
WM_SIZECLIPBOARD= $030B //当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;
WM_ASKCBformATNAME= $030C //通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字
WM_CHANGECBCHAIN= $030D //当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;
WM_HSCROLLCLIPBOARD = $030E //
此消息通过一个剪贴板观察窗口发送给剪贴板的所有者;它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图象并更新滚动条的值;
WM_QUERYNEWPALETTE= $030F //此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板
WM_PALETTEISCHANGING= $0310 //当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序
WM_PALETTECHANGED = $0311 //此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此
来改变系统调色板
WM_HOTKEY = $0312 //当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息
WM_PRINT= 791 //应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘制一个应用程序的一部分;
WM_PRINTCLIENT= 792 //
WM_HANDHELDFIRST= 856 //
WM_HANDHELDLAST = 863 //
WM_PENWINFIRST= $0380 //
WM_PENWINLAST = $038F //
WM_COALESCE_FIRST = $0390 //
WM_COALESCE_LAST= $039F //
WM_DDE_FIRST= $03E0 //
WM_DDE_INITIATE = WM_DDE_FIRST + 0 //一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;
WM_DDE_TERMINATE= WM_DDE_FIRST + 1 //一个DDE应用程序(无论是客户还是服务器)提交此消息来终止一个会话;
WM_DDE_ADVISE = WM_DDE_FIRST + 2 //一个DDE客户程序提交此消息给一个DDE服务程序来请求服务器每当数据项改变时更新它
WM_DDE_UNADVISE = WM_DDE_FIRST + 3 //一个DDE客户程序通过此消息通知一个DDE服务程序不更新指定的项或一个特殊的剪贴板格式的项
WM_DDE_ACK= WM_DDE_FIRST + 4 //此消息通知一个DDE(动态数据交换)程序已收到并正在处理WM_DDE_POKE, WM_DDE_EXECUTE, WM_DDE_DATA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_INITIAT消息
WM_DDE_DATA = WM_DDE_FIRST + 5 //一个DDE服务程序提交此消息给DDE客户程序来传递个一数据项给客户或通知客户的一条可用数据项
WM_DDE_REQUEST= WM_DDE_FIRST + 6 //一个DDE客户程序提交此消息给一个DDE服务程序来请求一个数据项的值;
WM_DDE_POKE = WM_DDE_FIRST + 7 //一个DDE客户程序提交此消息给一个DDE服务程序,客户使用此消息来请求服务器接收一个未经同意的数据项;服务器通过答复WM_DDE_ACK消息提示是否它接收这个数据项;
WM_DDE_EXECUTE= WM_DDE_FIRST + 8 //一个DDE客户程序提交此消息给一个DDE服务程序来发送一个字符串给服务器让它象串行命令一样被处理,服务器通过提交WM_DDE_ACK消息来作回应;
WM_DDE_LAST = WM_DDE_FIRST + 8 //
WM_APP = $8000 //
WM_USER = $0400 //此消息能帮助应用程序自定义私有消息;

/////////////////////////////////////////////////////////////////////
通知消息(Notification message)是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通
知父窗口。通知消息只适用于标准的窗口控件如按钮、列表框、组合框、编辑框,以及Windows 95公
共控件如树状视图、列表视图等。例如,单击或双击一个控件、在控件中选择部分文本、操作控件的
滚动条都会产生通知消息。

按扭
BN_CLICKED //用户单击了按钮
BN_DISABLE //按钮被禁止
BN_DOUBLECLICKED //用户双击了按钮
BN_HILITE //用户加亮了按钮
BN_PAINT //按钮应当重画
BN_UNHILITE //加亮应当去掉

组合框
CBN_CLOSEUP //组合框的列表框被关闭
CBN_DBLCLK //用户双击了一个字符串
CBN_DROPDOWN //组合框的列表框被拉出
CBN_EDITCHANGE //用户修改了编辑框中的文本
CBN_EDITUPDATE //编辑框内的文本即将更新
CBN_ERRSPACE //组合框内存不足
CBN_KILLFOCUS //组合框失去输入焦点
CBN_SELCHANGE //在组合框中选择了一项
CBN_SELENDCANCEL //用户的选择应当被取消
CBN_SELENDOK //用户的选择是合法的
CBN_SETFOCUS //组合框获得输入焦点

编辑框
EN_CHANGE //编辑框中的文本己更新
EN_ERRSPACE //编辑框内存不足
EN_HSCROLL //用户点击了水平滚动条
EN_KILLFOCUS //编辑框正在失去输入焦点
EN_MAXTEXT //插入的内容被截断
EN_SETFOCUS //编辑框获得输入焦点
EN_UPDATE //编辑框中的文本将要更新
EN_VSCROLL //用户点击了垂直滚动条消息含义

列表框
LBN_DBLCLK //用户双击了一项
LBN_ERRSPACE //列表框内存不够
LBN_KILLFOCUS //列表框正在失去输入焦点
LBN_SELCANCEL //选择被取消
LBN_SELCHANGE //选择了另一项
LBN_SETFOCUS //列表框获得输入焦点

July 24

系统权限UNLIMITED TABLESPACE为什么如此特殊?

1、系统权限UNLIMITED TABLESPACE 不能被授予role,可以被授予用户!
2、UNLIMITED TABLESPACE 没有被包括在resource role中,但是UNLIMITED TABLESPACE 随着resource的授出而被授予用户的。
3、UNLIMITED TABLESPACE 不能伴随着resource被授予role而授予用户。
1、测试1
系统权限UNLIMITED TABLESPACE 不能被授予role,可以被授予用户!
SQL> create role rl1 ;
角色已创建。
SQL> create user test identified by test;
用户已创建。
SQL> grant connect , create table , unlimited tablespace to rl1;
grant connect , create table , unlimited tablespace to rl1
*
第 1 行出现错误:
ORA-01931: 无法将 UNLIMITED TABLESPACE 授予角色
SQL> grant connect , create table to rl1;
授权成功。
SQL> grant rl1 , unlimited tablespace to test;
授权成功。
SQL>
2、测试2
系统权限UNLIMITED TABLESPACE 没有被包括在resource role中,但是UNLIMITED TABLESPACE 随着resource的授出而被授予用户。
SQL> revoke rl1 , unlimited tablespace from test;
撤销成功。
SQL> grant connect , create table to test;
授权成功。
SQL> connect test/test
已连接。
SQL> create table t(id int);
create table t(id int)
*
第 1 行出现错误:
ORA-01950: 对表空间 'USERS' 无权限
SQL> connect xys/manager
已连接。
SQL> grant resource to test;
授权成功。
SQL> connect test/test
已连接。
SQL> create table t(id int);
表已创建。
SQL> CONNECT XYS/MANAGER
已连接。
SQL> select * from dba_sys_privs where grantee='TEST';
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
TEST CREATE TABLE NO
TEST UNLIMITED TABLESPACE NO
SQL> select * from dba_sys_privs where grantee='RESOURCE';
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TYPE NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE INDEXTYPE NO
RESOURCE CREATE TABLE NO
已选择8行。
SQL>
3、测试3
UNLIMITED TABLESPACE 不能伴随着resource被授予role而授予用户,具体一点就是resource被授予了rl1 role,把rl1授予了test用户,但是此时UNLIMITED TABLESPACE 没有被授予test用户!
SQL> create role rl1;
角色已创建。
SQL> create user test identified by test;
用户已创建。
SQL> grant connect,resource to rl1;
授权成功。
SQL> select * from dba_role_privs where grantee='RL1';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
RL1 CONNECT NO YES
RL1 RESOURCE NO YES
SQL> grant rl1 to test;
授权成功。
SQL> connect test/test
已连接。
SQL> create table t(id int);
create table t(id int)
*
第 1 行出现错误:
ORA-01950: 对表空间 'USERS' 无权限
SQL> connect xys/manager
已连接。
SQL> grant unlimited tablespace to test;
授权成功。
SQL> connect test/test
已连接。
SQL> create table t(id int);
表已创建。
June 16

最常见的20种VC++编译错误信息集合

 
1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")
2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory
不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition
类“C……”重定义。
4、error C2018: unknown character '0xa3'
不认识的字符'0xa3'。(一般是汉字或中文标点符号)
5、error C2057: expected constant expression
希望是常量表达式。(一般出现在switch语句的case分支中)
6、error C2065: 'IDD_MYDIALOG' : undeclared identifier
“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'
函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'
句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier 'dc'
句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used
值69已经用过。(一般出现在switch语句的case分支中)
11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'
成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention
类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。
14、error C2660: 'SetTimer' : function does not take 2 parameters
“SetTimer”函数不传递2个参数。
15、warning C4035: 'f……': no return value
“f……”的return语句没有返回值。
16、warning C4553: '= =' : operator has no effect; did you intend '='?
没有效果的运算符“= =”;是否改为“=”?
17、warning C4700: local variable 'bReset' used without having been initialized
局部变量“bReset”没有初始化就使用。
18、error C4716: 'CMyApp::InitInstance' : must return a value
“CMyApp::InitInstance”函数必须返回一个值。
19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing
连接错误:不能打开P1.exe文件,以改写内容。(一般是P1.Exe还在运行,未关闭)
20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C……::~C……(void)"
连接时发现没有实现的外部符号(变量、函数等)。
function call missing argument list 调用函数的时候没有给参数。
member function definition looks like a ctor, but name does not match enclosing class 成员函数声明了但没有使用
unexpected end of file while looking for precompiled header directive 在寻找预编译头文件时文件意外结束,编译不正常终止可能造成这种情况
May 23

VC6远程调试

 
背景:
    程序在自己的机器上运行正常,到别人的机器上就问题不断,怎么回事?不知道,调试一下吧,但是其他人的机器上没有安装VC,怎么办? 装一个? 其实不必那么费时费事,用自己机器上的开发环境完全可以调试其他机器上的程序, 这就是"远程调试"!
 
基本概念:
    远程客户机器 (指运行需要调试程序的机器)
    本地调试机器 (指运行VC用来调试其他PC上程序的机器)
 
步骤:
    1. 在"远程客户机器"上建立一个能够读写的共享目录。比如 "\\Pc1\remote_debug", 其实是把该机器上 "D:\debug" 目录共享了出来
    2. 把VC的远程调试工具Visual C++ Debug Monitor(Msvcmon.exe)拷贝到"远程客户机器"的共享目录下(msvcmon.exe,tln0t.dll,dm.dll,msdis110.dll).
    3. 在"本地调试机器"打开VC的工程项目
    4. 在   VC -> Project setting -> Link -> Output file name 中, 设置生成的文件到"远程客户机器"共享目录中. 如 "\\Pc1\remote_debug\Hello.exe"
    5. 检查 VC -> Project setting -> Debug -> Executable for debug session, 应该与Link中的相同
    6. 在   VC -> Project setting -> Debug -> Remote executable path and file name 中, 输入"远程客户机器"上可执行文件的路径。这里就是 "D:\debug\Hello.exe"
    7. 在   VC -> Build -> Debugger remote connection 中, 选择 Network(Tcp/IP), Setting 中输入"远程客户机器"的名字或者IP(注意不要带\\).
    8. 在"远程客户机器"上,启动共享目录下的MSVCMON.EXE,不用点Setting,直接Connect
    9. 在"本地调试机器"上,设置断点, 按F5开始调试
    10.可以辅助使用远程桌面等工具
May 20

身份证号

18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。
GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。
GB11643-1999《公民身份号码》主要内容如下:
一、范围
该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。
二、编码对象
公民身份号码的编码对象是具有中华人民共和国国籍的公民。
三、号码的结构和表示形式
1、号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
2、地址码
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3、出生日期码
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4、顺序码
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
5、校验码
(1)十七位数字本体码加权求和公式
S = Ai * Wi, i = 2, ... , 18
Y = mod(S, 11)
i: 表示号码字符从右至左包括校验码字符在内的位置序号
Ai:表示第i位置上的身份证号码字符值
Wi:表示第i位置上的加权因子
i: 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
(2)校验码字符值的计算
Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
四、举例如下:
北京市朝阳区: 11010519491231002X
广东省汕头市: 440524188001010014
五、身份证号前6位代表的行政区域:
北京市|110000,天津市|120000,河北省|130000,山西省|140000,内蒙古自治区|150000
辽宁省|210000,吉林省|220000,黑龙江省|230000
上海市|310000,江苏省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山东省|370000
河南省|410000,湖北省|420000,湖南省|430000,广东省|440000,广西壮族自治区|450000,海南省|460000
重庆市|500000,四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000
陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000
台湾省(886)|710000
香港特别行政区(852)|810000
澳门特别行政区(853)|820000
May 14

汉字拼音对照表

a => '啊阿呵吖嗄腌锕錒',
ai => '爱矮挨哎碍癌艾唉哀蔼隘埃皑呆嗌嫒瑷暧捱砹嗳锿霭乂乃伌僾儗凒剀剴叆呃呝啀嘊噫噯堨塧壒奇娭娾嬡嵦愛懓懝敱敳昹曖欬欸毐溰溾濭烠焥璦皚皧瞹硋磑礙絠薆藹諰譪譺賹躷醷鎄鑀閡阂阨阸隑靄靉餲馤騃鯦鱫鴱崖',
an => '按安暗岸俺案鞍氨胺厂广庵揞犴铵桉谙鹌埯黯侒儑匼厈咹唵啽垵垾堓婩媕屽峖干晻洝玵痷盒盦盫碪罯腤荌菴萻葊蓭裺誝諳豻貋遃鉗銨錌钳闇陰隂隌雸鞌韽頇頞顸馣鮟鴳鵪鶕',
ang => '昂肮盎仰卬岇昻枊醃醠骯',
ao => '袄凹傲奥熬懊敖翱澳嚣拗媪廒骜嗷坳遨聱螯獒鏊鳌鏖岙厫嗸噢嚻囂垇墺墽奡奧媼嫯岰嶅嶴慠扷抝摮擙柪梎棍泑浇滶澆澚熝爊獓璈眑磝磽礉翶翺芺蔜蝹襖謷謸軪郩鏕镺隞驁鰲鴁鴢鷔鼇',
ba => '把八吧爸拔罢跋巴芭扒坝霸叭靶笆疤耙捌粑茇岜鲅钯魃菝灞仈伯叐哱哵坺垻墢壩夿妭峇弝抜抪捭朳杷柭欛湃炦犮玐癹皅矲笩紦罷羓胈茷萆蚆覇詙豝跁軷釛釟鈀颰魞鮁鮊鲃鲌鼥',
bai => '百白摆败柏拜佰伯稗捭呗掰唄庍扒拝挀排擺敗栢派猈竡粨粺絔薜薭襬贁鞁鞴韛',
ban => '半办班般拌搬版斑板伴扳扮瓣颁绊癍坂钣舨阪瘢並分坢埿姅岅彬怑搫攽斒昄朌柈湴瓪秚籓粄絆肦蝂螁螌褩覂豳跘辦辧辨辩辬辯鈑鉡闆靽頒魬鳻',
bang => '帮棒绑磅镑邦榜蚌傍梆膀谤浜蒡並嗙垹埲塝嫎峀崗幇幚幫彭徬挷捠搒旁棓牓玤硥稖紡綁縍纺艕蚄蛖蜯螃謗邫鎊鞤騯髈',
bao => '包抱报饱保暴薄宝爆剥豹刨雹褒堡苞胞鲍炮瀑龅孢煲褓鸨趵葆佨儤剝勹勽呆嘐嚗堢報媬嫑寚寳寶忁怉曓枹珤砲窇笣簿緥菢蕔藵虣蚫袌袍裒裦襃賲鉋鑤铇闁靌靤飹飽駂骲髱鮑鳵鴇齙宀',
be => '萡',
bei => '被北倍杯背悲备碑卑贝辈钡焙狈惫臂褙悖蓓鹎鐾呗邶鞴孛陂碚俻俾偝偹備僃哱唄喺垻埤怫愂憊揹昁杮柸桮梖棑棓椑波牬犕狽珼琲痺盃禙箃糒苝茀菩萆萯葡藣蛽蜚襬誖諀貝跋軰輩鄁鉳鋇錍鐴骳鵯',
ben => '本奔苯笨夯锛贲畚坌体倴喯夲奙捹撪桳楍泍渀炃燌犇獖翉蟦賁輽逩錛鐼',
beng => '蹦绷甭崩迸蚌泵甏嘣伻俸傍傰唪嗙埄埲堋塴奟嵭平抨挷搒旁榜漨熢琣琫痭祊絣綳繃菶跰逬錋鏰镚閍鞛',
bi => '比笔闭鼻碧必避逼毕臂彼鄙壁蓖币弊辟蔽毙庇敝陛毖痹秘泌秕薜荸芘萆匕裨畀俾嬖狴筚箅篦舭荜襞庳铋跸吡愎贲滗濞璧哔髀弼妣婢仳佊佖佛偪匂卑咇啚嗶坒埤堛复夶奰妼娝媲嬶屄崥幅幣幤庀廦弻彃怭怶悂愊拂捭斃旇服朼枇枈柀柲梐椑楅檗殍毴沘波湢滭潷煏熚獘獙珌畁畐畢疕疪痺皀皕瞥禆稫笓筆箃箄箆篳粃粊紕紴綼縪繴纰罷罼翍聛肶肸胇脾腗腷苾萞蓽蘗虑蜌螕袐被襅襣觱詖诐豍貏貱費賁贔费赑跛踾蹕躃躄邲鄨鄪鈚鉍錍鎞鏎鐴鐾閇閈閉閟闬陂陴鞁鞞鞸韠飶饆馝馥駜驆髲魓魮鮅鮩鰏鲾鴓鵖鶝鷝鷩鸊鼊',
bia => '髟',
bian => '边变便遍编辩扁贬鞭卞辨辫忭砭匾汴碥蝙褊鳊笾苄窆弁缏煸変封峅徧惼抃拚揙昪汳炞牑猵獱甂疺稨稹箯籩糄編緶臱艑萹藊覍覵變豍貶辡辦辧辮辯邉邊邲釆鍽閞鞕頨鯾鯿鴘鶣髟',
biao => '表标彪膘杓婊飑飙鳔瘭飚镳裱骠镖俵僄儦剽墂嫖幖徱摽標檦淲滮漂瀌灬熛爂猋穮篻脿膔臕苞蔈藨褾諘謤贆錶鏖鏢鑣颮颷飆飇飈飊驃驫骉鰾麃髟',
bie => '别憋鳖瘪蹩別咇彆徶扒拔捌撆撇柭柲猰癟秘穪苾莂蔽虌蛂蟞襒鱉鼈龞',
bin => '宾濒摈彬斌滨豳膑殡缤髌傧槟鬓镔玢份儐擯椕殯氞汃浜濱濵瀕瑸璸砏繽臏虨蠙訜豩賓賔贇赟邠鑌霦頻顮频髕髩鬂鬢',
bing => '并病兵冰丙饼屏秉柄炳摒槟禀邴並仌併倂偋傡冫垪寎平幷庰怲抦拼掤昞昺枋栟栤梹棅檳氷燷燹琕痭癛癝眪稟窉竝絣綆绠苪蛃誁跰鈵鉼鋲陃靐鞆鞞鞸餅餠鮩疒',
bo => '拨波播泊博伯驳玻剥薄勃菠钵搏脖帛般柏舶渤铂箔膊魄卜礴跛檗亳鹁踣啵蕃簸钹饽擘仢佛侼僠僰剝募哱噃嚗壆妭孛孹嶓帗彴怕愽懪拍拔挬撥擗暴服柭桲榑檘欂殕泼浡淿湐潑潘瀑煿爆牔犦犻狛猼瓝瓟番癶發白百皪盋砵碆磻礡秡穛笩箥簙簿糪紴缽肑胉艊艴苩茀茷菩葧蒲蔔蔢薜蘖蘗蚾袚袯袹襎襏襮詙譒豰趵跑蹳郣鈸鉑鉢鋍鎛鑮镈餑餺馎馛馞駁駮驋髆髉鮁鮊鱍鲅鲌鵓掰',
bu => '不步补布部捕卜簿哺堡埠怖埔瓿逋晡钸钚醭卟佈僕勏吥咘埗婄尃峬庯廍悑抪拊捗捬撲擈柨歨歩溥獛秿箁篰荹蔀薄補誧踄輹轐郶鈈鈽附陠鞴餔餢鯆鳪鵏鸔',
ca => '擦拆礤嚓傪囃攃橴磣礸蔡遪',
cai => '才菜采材财裁猜踩睬蔡彩倸偲啋埰婇寀戝扐採揌棌綵縩纔財跴',
can => '蚕残掺参惨惭餐灿骖璨孱黪粲傪儏參叄叅喰嘇噆囋嬠嬱嵾慘慙慚憯戔摲朁殘淺湌澯燦爘穇篸薒蝅蠶蠺謲蹔鏒飡飱驂鯵鰺鲹黲',
cang => '藏仓沧舱苍伧仺倉傖凔匨嵢欌滄濸獊瑲篬罉臧艙蒼蔵螥賶鑶鶬鸧',
cao => '草操曹槽糙嘈艚螬漕傮屮嶆愺慅慒懆撡曺澡肏艸艹蓸褿襙造鄵鏪鐰騲鼜',
ce => '册侧策测厕恻側冊厠墄嫧帻幘廁惻憡拺敇柵栅測畟笧筞筴箣簎粣荝萗萴蓛赦齰刂',
cen => '参岑涔參叄叅嵾梣汵硶穇笒篸膥',
ceng => '曾层蹭噌僧增層嶒橧竲繒缯驓',
ceok => '硛硳',
ceom => '岾',
ceon => '猠',
ceor => '乽',
cha => '查插叉茶差岔搽察茬碴刹诧楂槎镲衩汊馇檫姹杈锸嚓仛侘偛剎嗏土垞奼岎嵖扠扱挿捈捷接揷摖斜査梌猹疀秅紁肞臿艖芆苴荖荼褨訍詧詫蹅釵銟鍤鎈鑔钗靫餷喳',
chai => '柴拆差豺钗瘥虿侪儕勑叉喍囆扠搓查犲祡茈茝蔕蠆袃訍釵齜龇',
chan => '产缠掺搀阐颤铲谗蝉单馋觇婵蒇谄冁廛孱蟾羼镡忏潺禅骣躔澶丳亶佔僝僤儃儳兎兔刬剗剷劖単厘啴單嘽嚵囅團墠壥嬋嬗崭嵼嶃嶄巉幝幨憚懴懺掸摌摲摻撣攙斺旵梴棎榐欃毚沾浐渐湹滻漸潹瀍瀺灛煘燀獑產産硟磛禪簅緂緾繟繵纏纒胀脠艬苫蕆螹蟬蟺袩裣裧襌襜襝覘誗諂譂讇讒讖谶蹍辿鄽酁醦鉆鋋鋓鏟鑱镵閳闡韂顫饞',
chang => '长唱常场厂尝肠畅昌敞倡偿猖裳鲳氅菖惝嫦徜鬯阊怅伥昶苌娼仧倀倘僘償儻兏厰嘗嚐場塲尙尚廠悵晿暢棖椙淌淐焻玚琩瑒瑺瓺甞畼脹腸膓萇蟐裮誯鋹鋿錩鏛锠長镸閶闛韔鯧鱨鲿鼚',
chao => '朝抄超吵潮巢炒嘲剿绰钞怊焯耖晁仦仯劋勦唠嘮巐巣弨摷槱樔欩涛漅濤焣煼牊眧窲粆紹綤綽縐繛绉绍罺觘訬謅謿诌趠趫轈鄛鈔麨鼂鼌',
che => '车撤扯掣彻尺澈坼砗伡俥偖勶呫唓喢多夛奲宅屮徹揊摰撦斥池烢烲焎爡瞮硨硩聅莗蛼詀謵車迠頙',
chen => '趁称辰臣尘晨沉陈衬橙忱郴榇抻谌碜谶宸龀嗔伧琛侲傖儭嚫堪塡填塵墋夦帘愖捵揨敐曟枕桭棧棽樄櫬沈湛瀋烥煁疢疹瘎瘨眈瞋硶磣稱綝縝缜肜胂茞莀莐蔯薼螴襯訦諃諶謓謲讖賝贂趂趻跈踸軙迧醦鈂鍖闖闯陳霃鷐麎齓齔秤',
cheng => '成乘盛撑称城程呈诚惩逞骋澄橙承塍柽埕铖噌铛酲晟裎枨蛏丞瞠乗伥侱倀偁僜净呛嗆埩堘塖娍宬峸嵊庱徎徴徵悜憆憕懲抢挰掁搶摚摤撐撜敞朾棖棦椉槍樘橕橖檉檙氶泟洆浈浧浾淨溗澂瀓瀞爯牚珵珹琤瑲畻盯睈矃碀稱穪窚竀筬絾緽脀脭荿虰蟶觕誠赪赬趟踜蹦郕郢醒鋮鎗鏳鏿鐺阷靗頳饓騁騬鯎黨秤',
chi => '吃尺迟池翅痴赤齿耻持斥侈弛驰炽匙踟坻茌墀饬媸豉褫敕哧瘛蚩啻鸱眵螭篪魑叱彳笞嗤傺佁侙俿剟勅卙卶叺呎呬呮呹哆啸喜喫嘨嘯噄噭坘垑奓她妛屟岻彨彲徲恜恥慗慸憏懘扡抬抶拆拕拖拸捇提搋摛摴攡杘柅柢樆欼歗歭歯汖沱沶治泜淔湁滞滯漦灻烾熾狋瓻痓痸瘈癡眙瞝祇离移竾筂箈箎粚糦絺翄翤翨耛肔胝胣胵脪腟芪茬荎莉菭蚇蚳蛇蝭袲袳裭訵誀誃誺謘謻貾赿趍趐趩跅跢跮踅踶軧迡迣遅遟遫遲邌鉓鉹銐鍉離雴飭飾餝饎饰馳騺驪骊鳷鴟鵄鵣鶒鶗鶙鷘麶黐齒齝郗',
chong => '冲重虫充宠崇涌种艟忡舂铳憧茺偅傭僮喠嘃埫寵崈徸憃揰摏樁沖浺漴潼烛爞珫痋盅祌種緟罿翀茧蝩蟲衝褈蹖蹱酮銃隀',
chou => '抽愁臭仇丑稠绸酬筹踌畴瞅惆俦帱瘳雠丒侴偢儔吜嚋圳妯婤媿嬦幬怞懤扭掫揄搊擣杻杽栦椆檮殠溴燽牰犨犫畤疇皗盩眣矁篘籌紬絒綢臰菗薵裯詶謅譸讎讐诌诪跾躊遚酧醔醜醻鈕钮雔魗鮘鯈鲋',
chu => '出处初锄除触橱楚础储畜滁矗搐躇厨雏楮杵刍怵绌亍憷蹰黜蜍樗俶傗儊儲処助嘼埱媰岀幮廚慉懨拀摢摴敊斶柠椘榋槒橻檚櫉櫖櫥欪歜涂淑滀濋炪犓珿琡璴硫礎祝禇竌竐篨絀絮耝耡臅芻菆著蒢蒭蓫蕏藸處蟵蠩褚觕觸詘諔諸诎诸豖豠貙趎跦踀踰躕鄐鉏鋤閦雛鶵鸀齣齭齼屮',
chua => '撮欻歘',
chuai => '揣膪啜嘬搋踹欼腄膗',
chuan => '穿船传串川喘椽氚遄钏舡舛巛傳僢剶圌堾惴掾暷歂汌猭玔瑏甎篅膞舩荈賗踳踹輲釧镩鶨',
chuang => '窗床闯创疮幢怆仓仺倉傸刅刱剏剙創噇囪囱愴戧摐朣橦漴漺牀牎牕瘡磢窓窻膧舂葱蔥闖',
chui => '吹垂炊锤捶椎槌棰陲倕圌埀惙搥桘箠腄菙郵錘鎚顀鬌魋龡',
chun => '春唇纯蠢醇淳椿蝽莼鹑偆僢堾媋惷旾暙朐杶楯槆橁櫄沌浱湻滣漘犉瑃睶箺純肫胊脣膞芚萅萶蒓蓴賰踳輇輴辁醕錞陙鯙鰆鶉鶞',
chuo => '戳绰踔啜龊辍促吷嚽娕娖婥婼孎惙拺擉斫歠涰淖焯磭箹簇綴綽繛缀腏荃蔟趠趵跿踱躇輟辵辶逴酫醛鋜錣鏃鑡镞齪齱',
ci => '次此词瓷慈雌磁辞刺茨伺疵赐差兹呲鹚祠糍佌佽偨刾厕厠司呰啙垐堲姕嬨嵯嵳庛廁措朿枱柌柴栜栨泚滋澬濨玼珁甆皉礠粢絘縒胔茈茦茲荠莿萕薋薺蚝蛓螅螆蠀詞賜赼趀趑跐辝辤辭鈶飺餈骴髊鮆鴜鶿鷀齹',
cis => '嗭',
cong => '从丛葱匆聪囱琮枞淙璁骢苁偬叢囪婃孮従徖從忩怱悤悰慒憁暰棇楤樅樬樷欉漎漗潀潈潨灇焧熜燪爜瑽瞛碂窗篵総緫縦縱總繱纵聡聦聰茐菆蓯蔥藂蟌誴謥賨賩鏦騘驄',
cou => '凑楱辏腠奏揍族湊玼簇蔟薮藪趋趣趨輳',
cu => '粗醋簇促卒徂猝蔟蹙酢殂蹴且卆噈娕娖媨怚憱戚捽瘄瘯皻縐縬绉脨蔍蔖觕誎趋趗趣趥趨踀踓踤踧蹵錯错顣麁麄麆麤鼀',
cuan => '窜蹿篡攒汆爨镩撺僔巑攅攛攢昕櫕欑殩濽灒熶穳窾竄篹簒菆襸躥鋑鑹',
cui => '催脆摧翠崔淬衰瘁粹璀啐悴萃毳榱乼伜体倅凗啛墔察崒崪嶉忰慛椊槯漼濢焠熣獕琗疩皠磪竁粋紣綷縗繀缞翆脃脺膬膵臎襊趡踤鏙隹顇',
cun => '村寸存蹲忖皴侟刌吋墫拵洊浚澊竴籿踆邨',
cuo => '错撮搓挫措磋嵯厝鹾脞痤蹉瘥锉矬剉剒夎嵳庴摧昔最棤澨營瑳睉縒莝莡蒫蓌蔖虘襊諎躜躦逪遳酂酇醝銼錯髊鹺齹',
da => '大答达打搭瘩塔笪耷哒褡疸怛靼妲沓嗒鞑亣剳匒呾咑噠垯塌墶憚搨撘橽毼汏溚炟燵畗畣眔矺笚繨羍胆荅荙薘蟽觰詚跶躂迏迖迭逹達鎉鎝鐽韃龖龘',
dai => '带代呆戴待袋逮歹贷怠傣大殆呔玳迨岱甙黛骀绐埭侢叇嘚垈帒帯帶廗懛曃柋棣毒汏瀻獃瑇箉簤紿緿艜蔕蚮蝳螮襶詒诒貸跢蹛軑軚軩轪逯遞遰隶霴靆馱駄駘驮鮘鴏黱',
dan => '但单蛋担弹掸胆淡丹耽旦氮诞郸惮石疸澹瘅萏殚眈聃箪赕儋啖丼亶伔倓僤儃冄冉刐勯匰単呾唌啗啿單嘾噉噡嚪坛壇妉娊媅帎弾彈忱怛惔愖憚憺憾抌撢撣擔柦檐欿殫沊泹湛潭澶澸燀狚玬瓭甔疍癉癚皽砃禫窞簞紞繵耼聸腅膻膽蜑蜒蟺衴褝襌襜覘觇觛訑詹誕譂贉贍赡蹛躭鄲酖醈霮頕餤饏馾駳髧鴠黕黮黵卩亻',
dang => '当党挡档荡谠铛宕菪凼裆砀偒儅噹圵场垱場壋婸崵嵣愓擋攩檔欓氹潒澢灙烫燙珰瑒璗璫瓽當瘍盪瞊碭礑筜簜簹艡蕩蘯蟷襠譡讜趤逿鐺闣雼黨',
dao => '到道倒刀岛盗稻捣悼导蹈祷帱纛忉焘氘叨俦儔受啁嘄噵壔宲導屶島嶋嶌嶹幬忑惆捯搗擣朷椡槝檤檮洮涛濤燾瓙盜禂禱稲箌絩翢翿舠菿薵虭衜衟裯軇醻釖陦陶隝隯魛鱽鳥鸟刂',
de => '的地得德底锝嘚徳恴悳惪棏淂登鍀陟',
dei => '得哋',
dem => '揼',
den => '扥扽',
deng => '等灯邓登澄瞪凳蹬磴镫噔嶝戥簦僜墱嬁憕橙櫈燈璒竳艠覴豋鄧鐙隥',
di => '地第底低敌抵滴帝递嫡弟缔堤的涤提笛迪狄翟蒂觌邸谛诋嘀柢骶羝氐棣睇娣荻碲镝坻籴砥仾俤偙僀儥勺厎呧唙啇啲啻嚁坔坘埅埊埞墆墑墬奃媂嵽嶳廸弔弚弤彽怟慸扚拞掋揥摕敵旳杓杕枤梊梑楴樀浟渧滌焍牴玓珶甋疐眱碮磾祶禘篴糴約締约聜肑胝腣芍苐苖莜菂菧蓧蔋蔐蔕藋藡蚳蝃螮袛覿觝詆諟諦豴赿趆踧踶蹄蹏蹢軧逐逓逮遞適遰釱鉪鍉鏑阺隄隶靮鞮頔題题馰髢鬄魡鯳鸐',
dia => '嗲',
dian => '点电店殿淀掂颠垫碘惦奠典佃靛滇甸踮钿坫阽癫簟玷巅癜佔傎厧唸埝墊壂奌婝婰嵮巓巔扂拈攧敁敟椣槇槙橂橝沾涎湺澱琔痶瘨癲磹腍蒧蕇蜓蜔詀蹎鈿電頕顚顛驔點齻丶',
diao => '掉钓叼吊雕调刁碉凋鸟铞铫鲷貂伄佻倜刀刟奝嬥屌弔弴彫扚挑椆殦汈淍琱瘹瞗矵稠窎窵竨簓粜糶絩綢绸莜蓧藋虭蛁蜩訋誂調赵趙跳踔軺轺釣鈟銱鋽錭鑃雿颩骠魡鮉鯛鳥鳭鵃鵰鸼鼦',
die => '爹跌叠碟蝶迭谍牒堞瓞揲蹀耋鲽垤喋佚咥哋啑峌崼嵽幉怢恎惵戜挃挕昳曡柣楪槢殜氎泆涉渉渫牃畳疂疉疊眣眰窒絰绖耊胅至臷艓苵蜨螲褋褶褺詄諜趃跕跮踢蹛軼轶鐡鐵镻鞢鮙鰈鰨鳎踮',
dim => '嚸',
ding => '顶定盯订叮丁钉鼎锭町玎铤腚碇疔仃耵酊啶奠奵嵿帄忊掟椗汀濎灯甼矴碠磸聢艼萣葶薡虰訂釘鋌錠鐤靪頂顁飣饤',
diu => '丢铥丟銩颩',
dong => '动东懂洞冻冬董栋侗恫峒鸫垌胨胴硐氡岽咚倲働凍動勭埬墥姛娻嬞峝崠崬戙挏揰昸東桐棟氭涷湩烔燑狫甬笗筒筩箽絧腖苳菄蕫蝀衕詷諌迵酮霘駧騆鮗鯟鶇鶫鼕夂',
dou => '都斗豆逗陡抖痘兜读蚪窦篼蔸乧侸兠凟剅吺唗投斣枓梪橷毭氀浢渎瀆瞗窬竇脰艔荳讀逾郖酘酡鈄鋀钭閗闘阧餖饾鬥鬦鬪鬬鬭',
du => '读度毒渡堵独肚镀赌睹杜督都犊妒顿蠹笃嘟渎椟牍黩髑芏儥凟剢剫匵厾噣土塗妬嬻宅帾斁晵暏樚樞橐櫝殬殰涜瀆牘犢獨琽瓄皾睪秺竇竺笁篤纛荰蝳螙蠧裻襡襩覩詫読讀讟诧豄賭贕醏錖鍍鍺鑟锗闍阇陼靯韇韣韥頓騳黷',
duan => '段短断端锻缎椴煅簖偳剬塅媏彖斷毈瑖碫篅籪緞耑腶葮褍踹躖鍛鍴',
dui => '对队堆兑敦镦碓怼憝兊兌垖埻塠夺奪対對嵟憞懟搥杸濧濻瀢瀩痽磓祋綐膭薱謉譈譵追鈗銳鋭錞鎚鐓鐜锐陮隊頧鴭',
dul => '乧',
dun => '吨顿蹲墩敦钝盾囤遁不趸沌盹镦礅炖砘伅俊噸墪壿庉忳惇憞撉撴楯橔潡燉犜獤碷腞腯蜳豚踲蹾躉逇遯鈍鐓鐜頓驐',
duo => '多朵夺舵剁垛跺惰堕掇哆驮度躲踱沲咄铎裰哚缍亸仛兊兌兑凙刴剟剫吋喥嚉嚲垜埵墮墯夛奪奲媠嫷尮崜嶞憜挅挆捶揣敓敚敠敪朶杂杕枤柁柂柮桗棰椯橢毲沰沱澤痥硾綞茤袳詑誃貀趓跢跥跿躱軃郸鄲鈬錞鍺鐸锗陀陊陏隋隓飿饳馱駄鬌鮵鵽點',
e => '饿哦额鹅蛾扼俄讹阿遏峨娥恶厄鄂锇谔垩锷阏萼苊轭婀莪鳄颚腭愕呃噩鹗屙亚亜亞伪佮侉偔偽僞僫匎匼卾吪呝咢咹哑唖啈啊啐啞噁囐囮垭埡堊堨堮妸妿姶娾娿媕屵岋峉峩崿庵廅悪惡戹搕搤搹擜曷枙椏櫮欸歞歹歺洝涐湂玀珴琧痷皒睋砈砐砨砵硆硪磀礘胺蒍蕚蘁蚅蝁覨訛詻誐諤譌讍豟軛軶輵迗遌遻邑鈋鋨鍔鑩閜閼阨阸隘頞頟額顎餓餩騀鬲魤魥鰐鰪鱷鴳鵈鵝鵞鶚齃齶齾',
en => '恩摁蒽嗯奀峎煾饐唔',
eng => '鞥',
eo => '仒',
eol => '乻',
eom => '欕',
eos => '旕',
er => '而二耳儿饵尔贰洱珥鲕鸸佴迩铒侕児兒刵咡唲嬭尒尓峏弍弐杒栭栮樲毦洏渪濡爾粫耏聏胹臑荋薾衈袻誀貮貳趰輀輭轜邇鉺陑陾隭餌駬髵髶鮞鴯',
fa => '发法罚伐乏筏阀珐垡砝佱傠姂廢彂拔拨撥栰橃汎沷泛灋琺疺発發瞂笩罰罸茷蕟藅貶贬醗醱鍅閥髪髮',
fan => '反饭翻番犯凡帆返泛繁烦贩范樊藩矾钒燔蘩畈蕃蹯梵幡仮伋凢凣勫匥噃墦奿婏嬎嬏嬔忛憣払拚旙旛杋柉棥楓橎氾汎渢滼瀪瀿煩犿璠畨盕礬笲笵範籓籵緐繙羳膰舤舧舩薠蟠蠜袢襎訉販軓軬轓辺釩鐇颿飜飯飰鱕鷭攵犭',
fang => '放房防纺芳方访仿坊妨肪钫彷邡枋舫鲂倣匚埅堏旊昉昘昞汸淓牥瓬眆眪祊紡蚄訪趽鈁錺雱髣魴鰟鳑鴋鶭',
fei => '非飞肥费肺废匪吠沸菲诽啡篚蜚腓扉妃斐狒芾悱镄霏翡榧淝鲱绯痱俷剕厞墢奜婓婔屝廃廢怫拂昲暃曊朏杮柹棐橃橨櫠渄濷犻猆琲疿癈砩祓笰紼緋绋胇胏胐茀茇萉蕜蕟蕡蜰蟦裴裵裶襏誹費鐨陫靅靟飛飝餥馡騑騛髴鯡鼣鼥',
fen => '分份芬粉坟奋愤纷忿粪酚焚吩氛汾棼瀵鲼玢偾鼢僨匪喷噴坆坋墳奔奮妢岎帉幩弅愍憤扮拚敃昐朆朌枌梤棻橨歕濆炃燌燓燔獖盼瞓砏秎竕糞紛羒羵翂肦膹葐蒶蕡蚠蚡衯訜豮豶賁贲躮轒鈖錀鐼隫雰頒颁餴饙馚馩魵鱝鳻黂黺鼖',
feng => '风封逢缝蜂丰枫疯冯奉讽凤峰锋烽砜俸酆葑沣唪仹偑僼凨凬凮埄堸夆妦寷峯崶捀捧摓桻楓檒沨泛浲渢湗溄漨灃炐焨煈熢犎猦琒甮瘋盽碸篈綘縫肨舽艂莑蘕蘴蚌覂諷豊豐賵赗逄鄷鋒鎽鏠靊風飌馮鳯鳳鴌鵬鹏麷覅',
fo => '佛仏仸坲梻',
fou => '否缶不垺妚炰紑缹缻芣衃雬鴀',
fu => '副幅扶浮富福负伏付复服附俯斧赴缚拂夫父符孵敷赋辅府腐腹妇抚覆辐肤氟佛俘傅讣弗涪袱市甫釜脯腑阜咐黼砩苻趺跗蚨芾鲋幞茯滏蜉拊菔蝠鳆蝮绂绋赙罘稃匐麸凫桴莩孚馥驸怫祓呋郛芙艴黻不乀仅伕俌俛偩偪冨冹刜包呒咈哹哺嘸坿垘垺報妋姇娐婏婦媍嬎嬔宓尃岪峊巿帗弣彳彿復怀怤懯抙捊捬掊撫旉枎枹柎柫柭栿棴椨椱榑汱沕沸泭洑溥澓炥烰焤玞玸琈璷甶畉畐畗癁盙砆祔禣秿稪竎笰筟箁箙簠粰糐紨紱紼絥綍綒緮縛纀罦翇胕膚艀芣茀荂荴莆萉萯葍蓲蕧虙蚥蚹蛗蜅蝜衭袚袝複褔襆襥覄訃詂諨豧負費賦賻费踾軵輔輹輻还邚邞郍郙鄜酜酻釡鈇鉘鉜錇鍑鍢锫阝陚鞴韍韛韨頫颫颰駙髴鬴鮄鮒鮲鰒鳧鳬鳺鴔鵩鶝麩麬麱',
ga => '噶胳夹嘎咖轧钆伽旮尬尕尜呷嘠玍軋釓錷魀',
gad => '甴',
gai => '该改盖概钙芥溉戤垓丐陔赅乢侅匃匄咳姟峐忋摡晐杚核槩槪汽漑瓂畡磑祴絠絯胲荄葢蓋該豥賅賌郂鈣鎅閡阂阣隑骸',
gan => '赶干感敢竿甘肝柑杆赣秆旰酐矸疳泔苷擀绀橄澉淦尴坩个乹乾亁仠佄倝凎凲咁奸尲尶尷幹忓扞捍攼桿榦檊汗汵浛漧灨玕玵皯盰稈笴筸篢簳粓紺芉虷衦詌諴豃贑贛趕迀釬錎飦骭魐鰔鱤鳡鳱',
gang => '刚钢纲港缸岗杠冈肛扛筻罡戆亢伉冮剛堈堽岡崗戅戇抗掆棡槓溝焵牨犅犺疘矼碙綱罁罓肮釭鋼鎠阬頏颃',
gao => '高搞告稿膏篙羔糕镐皋郜诰杲缟睾槔锆槁藁勂吿咎夰峼暠槀槹橰檺櫜浩滜澔獋獔皐睪祮祰禞稁稾筶縞羙臯菒蒿藳誥鋯鎬韟餻髙鷎鷱鼛',
ge => '个各歌割哥搁格阁隔革咯胳葛蛤戈鸽疙盖屹合铬硌骼颌袼塥虼圪镉仡舸鬲嗝膈搿纥哿介佫佮個匌可吤呄嘅嘢噶彁愅戓戨扢挌擱敋杚槅櫊浩滆滒澔牫牱犵猲獦砝秴箇紇肐臈臵茖菏蓋蛒裓觡詥諽謌輵轕鉀鉻鉿鎑鎘鎶钾铪閘閣閤闸鞈鞷韐韚頜騔髂魺鮥鮯鰪鲄鴐鴚鴿鵅',
gei => '给',
gen => '跟根哏茛亘艮揯搄',
geng => '更耕颈梗耿庚羹埂赓鲠哽绠亙亢刯堩峺恆挭掶暅椩浭焿畊硬絙絚綆緪縆羮莄菮賡邢郉郠頸骾鯁鶊鹒',
gib => '喼',
go => '嗰',
gong => '工公功共弓攻宫供恭拱贡躬巩汞龚红肱觥珙蚣匑匔厷咣唝嗊塨宮幊廾愩慐拲杛杠栱渱熕碽篢糼紅羾虹蛩觵貢贑贛赣躳輁銾鞏髸魟龏龔',
gou => '够沟狗钩勾购构苟垢句岣彀枸鞲觏缑笱诟遘媾篝佝傋冓区區呴坸夠姤抅拘搆撀構泃溝煹玽簼緱耇耈耉茩蚼袧褠覯訽詬豰豿購軥鈎鉤雊韝鮈鴝鸜鸲',
gu => '古股鼓谷故孤箍姑顾固雇估咕骨辜沽蛊贾菇梏鸪汩轱崮菰鹄鹘钴臌酤呱鲴诂牯瞽毂锢牿痼觚蛄罟嘏傦僱凅劷告哌唂唃啒嗀嗗堌夃嫴尳峠崓怘愲扢抇枯柧棝榖榾橭櫎泒淈滑濲瀔焸瓠皋皷盬硲磆祻稒穀笟箛篐糓縎罛羖胍脵臯苦苽蓇薣蛌蠱角詁賈軱軲轂逧鈲鈷錮頋顧餶馉骰鮕鯝鴣鵠鶻鼔',
gua => '挂刮瓜寡剐褂卦呱胍鸹栝诖冎剮劀叧咶咼啩坬惴掛歄焻煱絓緺罣罫舌苽詿諣趏踻銛銽铦颪颳騧鴰括',
guai => '怪拐乖掴叏哙噲夬恠枴柺箉罫',
guan => '关管官观馆惯罐灌冠贯棺纶盥矜莞掼涫鳏鹳倌丱串卝婠悹悺慣懽摜斡果桄樌櫬權毌沦泴淉淪潅爟琯瓘痯瘝癏矔礶祼窤筦綸罆舘菅萖蒄覌観觀貫躀輨遦錧鏆鑵閞関闗關雚館鰥鱞鱹鳤鵍鸛',
guang => '光广逛桄犷咣胱侊俇僙垙姯広廣恍扩挄撗擴横櫎欟洸潢灮炗炚炛烡獷珖硄臦臩茪趪輄迋銧黆',
gui => '归贵鬼跪轨规硅桂柜龟诡闺瑰圭刽傀癸炔庋宄桧刿鳜鲑皈匦妫晷簋炅亀伪佹偽僞劊劌匭匮匱厬哇垝姽娃媯嫢嬀嶡嶲巂帰庪廆恑摫撌攰攱昋朹桅椝椢概槣槶槻槼檜櫃櫰櫷歸氿沩洼湀溎潙珪璝瓌癐瞆瞡瞶硊祈祪禬窐筀簂絵繪绘胿膭茥蓕蘬蛫螝蟡袿襘規觖觤詭謉貴赽趹蹶軌邽郌閨陒隗雟鞼騩鬶鬹鮭鱖鱥鳺鴂鴃龜',
gun => '滚棍辊鲧衮磙绲丨惃棞浑混渾滾琯璭睔睴緄緷蓘蔉袞裷謴輥錕锟鮌鯀鰥鳏',
guo => '过国果裹锅郭涡埚椁聒馘猓崞掴帼呙虢蜾蝈划咶咼唬啯嘓囗囯囶囻圀國埻堝墎幗彉彍惈慖搓摑敋枸楇槨櫎活淉渦漍濄瘑矌簂粿綶聝腂腘膕菓蔮蜮蝸蟈蠃褁輠過鈛錁鍋鐹锞餜馃',
ha => '哈蛤虾铪丷吓呵奤妎為獬蝦鉿',
hai => '还海害咳氦孩骇骸亥嗨醢胲侅咍咴嗐嚡塰拸欬烸猲絯還郂酼閡阂頦颏餀饚駭駴嘿',
hal => '乤',
han => '喊含汗寒汉旱酣韩焊涵函憨翰罕撼捍憾悍邯邗菡撖瀚阚顸蚶焓颔晗鼾仠佄傼兯凾厂厈咁哻唅嚂圅垾娢嫨屽崡嵅嵌忓感扞攼旰晘晥暵桿梒椷榦欦歛汵泔浛浫涆淊淦滩漢澉澏澣灘熯爳猂琀甘甝皔睅矸笒筨糮肣莟蔊蘫虷蛿蜬蜭螒譀谽豃軒轩釬鈐銲鋎鋡钤閈闞闬雗靬韓頇頜頷顄顩馠馯駻鬫魽鳱鶾',
hang => '行巷航夯杭吭颃沆绗珩垳妔忼斻桁炕狼笐筕絎肮苀蚢貥迒邟酐頏魧',
hao => '好号浩嚎壕郝毫豪耗貉镐昊颢灏嚆蚝嗥皓蒿濠薅傐儫呺哠唬嘷噑妞恏悎昦晧暠暤暭曍椃淏滈滜澔灝獆獋皋皜皞皡皥睾秏竓籇翯聕膠臯茠薃薧藃號虠蠔諕譹鄗鎒鎬鐞顥鰝',
he => '和喝合河禾核何呵荷贺赫褐盒鹤菏貉阂涸吓嗬劾盍翮阖颌壑诃纥曷佫呙呼咊咼哈哬啝喛嗃嗑噈嚇垎姀害寉峆惒愒抲挌揭敆柇格楁欱毼洽渇渮渴湼澕焃煂熆熇燺爀犵狢癋皬盇盉硅碋礉秴篕籺粭紇繳缴翯苛萂藃藿蚵蝎螛蠚袔覈訶訸詥謞貈賀輅轄辂辖郃鉌鑉閡闔阋隺霍靍靎靏鞨頜餄餲饸鬩魺鲄鵠鶡鶮鶴鸖鹄鹖麧齃齕龁龢',
hei => '黑嗨嬒潶黒嘿',
hen => '很狠恨痕佷哏噷拫掀艮詪鞎',
heng => '横恒哼衡亨行桁珩蘅佷啈堼姮恆悙橫涥烆狟胻脝訇鑅鴴鵆鸻',
ho => '乊',
hol => '乥',
hong => '红轰哄虹洪宏烘鸿弘讧訇蕻闳薨黉荭泓仜厷叿吰吽哅唝嗊嚝垬妅娂宖屸巆彋愩揈撔晎汪汯浤浲港渱渹潂澋澒灴焢玒玜瓨硔硡竑竤篊粠紅紘紭綋纮羾翃翝耾舼苰葒葓訌謍谹谼谾軣輷轟鈜鉷銾鋐鍧閎閧闀闂霐霟鞃鬨魟鴻黌',
hou => '后厚吼喉侯候猴鲎篌堠後逅糇骺瘊吽呴垕帿洉犼睺矦翭翵腄葔詬诟豞郈鄇銗鍭餱鮜鯸鱟鲘齁',
hu => '湖户呼虎壶互胡护糊弧忽狐蝴葫沪乎戏核和瑚唬鹕冱怙鹱笏戽扈鹘浒祜醐琥囫烀轷瓠煳斛鹄猢惚岵滹觳唿槲乕俿冴匢匫喖嗀嗃嘑嘝嚛垀壷壺姱婟媩嫭嫮寣帍幠弖怘恗戯戱戲戶戸抇搰摢擭昈昒曶枑楛楜槴歑殻汩汻沍泘洿淈淲淴滬滸濩瀫焀熩瓡瓳礐穫箎箶簄粐絗綔縎縏縠羽胍膴舗芐芔芦芴苦苸萀蔛蔰虍虖虝螜衚觷許謼護许豰軤鄠鈷鋘錿鍙鍸钴隺雇雐雽韄頀頶餬鬍魱鯱鰗鱯鳠鳸鴩鵠鶘鶦鶮鶻鸌',
hua => '话花化画华划滑哗猾豁铧桦骅砉侉劃劐吪哇嘩埖姡婲婳嫿嬅学學崋找搳摦撶敌杹椛槬樺檴浍澅澮獪璍畫畵硴磆稞粿糀繣腂舙芲華蒍蕐蘤蘳螖觟話誮諙諣譁譮輠釪釫鋘錵鏵驊魤鮭鲑鷨黊',
huai => '坏怀淮槐徊划踝佪咶喟嘳圳坯壊壞懐懷櫰瀤耲蘹蘾褢褱',
huan => '换还唤环患缓欢幻宦涣焕豢桓痪漶獾擐逭鲩郇鬟寰奂锾圜洹萑缳浣喚喛嚾圂垸堚奐孉寏峘嵈巜愌懁懽換援攌梙槵欥歓歡汍渙潅澣澴灌烉煥犿狟瑍瑗環瓛瘓皖眩睆睔瞏瞣糫絙綄緩繯羦肒脘荁萈蒝藧螌蠸讙豩豲貆貛輐轘還酄鉮鍰鐶镮闤阛雈雚驩鯇鯶鰀鴅鵍鸛鹮鹳',
huang => '黄慌晃荒簧凰皇谎惶蝗磺恍煌幌隍肓潢篁徨鳇遑癀湟蟥璜偟兤喤堭塃墴奛媓宺崲巟怳愰揘晄曂朚楻榥櫎汻洸滉炾熀熿爌獚瑝皝皩穔縨艎芒茫葟衁詤諻謊趪鍠鎤鐄锽韹餭騜鰉鱑鷬黃',
hui => '回会灰绘挥汇辉毁悔惠晦徽恢秽慧贿蛔讳徊卉烩诲彗浍珲蕙喙恚哕晖隳麾诙蟪茴洄咴虺荟缋佪僡儶匯叀嘒噅噕噦嚖囘囬圚堕墮壞婎媈孈寭屷幑廆廻廽彙彚徻恛恵憓懳拻揮撝暉暳會桧椲楎槥橞檅檓檜櫘毀毇沬泋洃涣湏滙潓澮濊瀈灳烜烠烣煇煒燬燴獩琿璤璯痐瘣皓眭睢睳瞺禈穢篲絵繢繪翙翚翬翽芔蒐蔧薈薉藱蘬蘳虫蚘蛕蜖螝袆褘襘詯詼誨諱譓譭譮譿豗賄輝輠违迴逥違銊鏸鐬闠阓隓靧鞼韋韢韦頮顪餯鮰鰴鼿齀溃',
hun => '混昏荤浑婚魂阍珲馄溷诨俒倱圂婫忶惛惽慁挥捆掍揮昆昬梡梱棍棔殙涽渾湣湷焄焝琿眃睧睯緄緍緡繉绲缗葷蔒觨諢轋閽顐餛餫鼲',
huo => '或活火伙货和获祸豁霍惑嚯镬耠劐藿攉锪蠖钬夥佸俰剨化吙咊咟嗀嚄嚿奯姡扮捇掝搉擭旤曤楇檴沎湱漷濊濩瀖灬焃獲瓠癨眓矆矐礊禍秮秳穫篧耯腘膕臛艧萿蒦諕謋豰貨越趏過邩鈥鍃鑊閄隻雘靃騞魊',
hwa => '夻',
i => '乁',
ji => '几及急既即机鸡积记级极计挤己季寄纪系基激吉脊际汲肌嫉姬绩缉饥迹棘蓟技冀辑伎祭剂悸济籍寂期其奇忌齐妓继集给革击圾箕讥畸稽疾墼洎鲚屐齑戟鲫嵇矶稷戢虮诘笈暨笄剞叽蒺跻嵴掎跽霁唧畿荠瘠玑羁丌偈芨佶赍楫髻咭蕺觊麂骥殛岌亟犄乩芰哜丮乁亼伋倚偮僟兾刉刏剤劑勣卙卟卽厝叝吇呰喞嗘嘰嚌坖垍堲塉墍妀姞姼尐居屰岋峜嵆嶯帺幾庴廭彐彑彶徛忣惎愱憿懠懻揖揤撃撠撽擊擠攲敧旡旣暩曁枅梞棋楖極槉槣樭機橶檕檝檵櫅櫭毄汥泲洁淁済湒漃漈潗濈濟瀱焏犱狤猗璂璣璾畟疵痵瘵癠癪皀皍睽瞉瞿磯禝禨秸稘稩穄穊積穖穧筓箿簊簎粢糭紀紒級結給継緝縘績繋繫繼结罽羇羈耤耭胔脔脨膌臮艥艻芶苙茍茤莋萁萕葪蒩蔇蕀蕲薊薺藉蘄蘎蘮蘻虀蜡蝍螏蟣蟻蟿蠀裚褀襀襋覉覊覘覬覿觇觌觙觭計訐記誋諅諔譏譤讦谻谿賫賷趌趞跂跡踑踖踦蹐蹟躋躤躸輯轚郅郆鄿銈銡錤鍓鏶鐖鑇鑙隔際隮雞雦雧霵霽鞊鞿韲颳飢饑騎驥骑鬾魝魢魥鮆鯚鯯鯽鰶鰿鱀鱭鱾鳮鵋鶏鶺鷄鷑鸄鹡齊齌齍齎齏',
jia => '家加假价架甲佳夹嘉驾嫁枷荚颊钾稼茄贾铗葭迦戛浃镓痂恝岬跏嘏伽胛笳珈瘕郏袈蛱傢價叚呷咖唊圿埉夏夓夾婽宊幏徦忦戞扴抸押拁拮挈挟挾揩揳擖斚斝暇梜椵榎榢槚檟毠泇浹犌猰猳玾筴糘耞脥腵莢蛺蝦袷裌豭貑賈跲郟鉀鉫鉿鋏鎵铪頡頬頰颉餄饸駕駱骆骱鴶鵊麚',
jian => '见件减尖间键贱肩兼建检箭煎简剪歼监坚奸健艰荐剑渐溅涧鉴浅践捡柬笺俭碱硷拣舰槛缄茧饯翦鞯戋谏牮枧腱趼缣搛戬毽菅鲣笕谫楗囝蹇裥踺睑謇鹣蒹僭锏湔侟俴倹偂傔僣儉冿前剣剱劍劎劒劔喊囏堅堑堿塹墹姦姧孱寋帴幵弿彅徤惤戔戩挸揀揃揵撿擶攕旔暕朁柙栫梘検椷椾榗樫橌橏橺檢檻櫼殱殲洊涀淺減湕滥漸澗濫濺瀐瀳瀸瀽熞熸牋犍猏玪珔瑊瑐監睷瞯瞷瞼碊磵礀礆礛稴筧箋箴篯簡籈籛糋絸緘縑繝繭纎纖纤聻臶艦艱茛菺葌葏葥蔪蕑蕳薦藆虃螹蠒袸襇襉襺見覵覸詃諓諫謭譖譼譾谮豜豣賎賤趝跈踐轞醎醶釰釼鈃銒銭鋄鋑鋻錢錬錽鍊鍳鍵鎫鏩鐗鐧鐱鑑鑒鑬鑯鑳钘钱閒間险險靬鞬韀韉餞餰馢騫骞鬋鰎鰔鰜鰹鳒鳽鵳鶼鹸鹹鹻鹼麉黚黬廴',
jiang => '将讲江奖降浆僵姜酱蒋疆匠强桨虹豇礓缰犟耩绛茳糨洚傋勥匞塂壃夅奨奬將嵹弜弶強彊摪摾杢槳橿櫤殭滰漿獎畕畺疅糡紅絳繮红翞膙葁蔃蔣薑螀螿袶講謽醤醬韁顜鱂鳉',
jiao => '叫脚交角教较缴觉焦胶娇绞校搅骄狡浇矫郊嚼蕉轿窖椒礁饺铰酵侥剿徼艽僬蛟敫峤跤姣皎茭鹪噍醮佼湫鲛挢乔侨僑僥儌劋勦勪却卻呌咬喬嘂嘄嘐嘦噭妖嫶嬌嬓孂学學峧嵺嶕嶠嶣恔悎憍憢憿挍捁摷撟撹攪敎敥敽敿斠晈暞曒樔橋櫵湬滘漖潐澆激灂灚烄焳煍燋獥珓璬皦皭矯稾穚窌笅筊簥糾絞繳纐纠腳膠膲臫芁茮菽萩蕎藠虠蟜蟭覐覚覺訆譑譥賋趫趭踋蹻較轇轎鄗釂釥鉸鐎餃驕骹鮫鱎鵁鵤鷦鷮纟',
jie => '接节街借皆截解界结届姐揭戒介阶劫芥竭洁疥藉价楷秸桔杰捷诫睫家偈桀喈拮骱羯蚧嗟颉鲒婕碣讦孑疖诘丯亥倢假偼傑價刦刧刼劼卪吤唧唶啑嚌圾堦堺契她妎媎媘媫嫅尐屆岊岕崨嵑嵥嶰嶻巀幯庎徣忦悈扢担拾掲搩擑擮擳斺昅暨曁桝椄楐楬楶概榤構檞櫭毑洯渇渴湝滐潔煯犗狤獬玠琾畍疌痎癤砎砝礍祖稭節籍紇紒結絜繲纥耤脻艐莭菨蓵蛣蛶蜐蝍蝔蠘蠞蠽衱衸袓袷袺裓褯觧訐詰誡誱謯趌跲踕迼鉣鍇鍻锴階雃鞂鞊頡飷髫魝魪鮚鶛卩',
jin => '进近今仅紧金斤尽劲禁浸锦晋筋津谨巾襟烬靳廑瑾馑槿衿堇荩矜噤缙卺妗赆觐伒侭僅僸儘兓凚劤勁厪吟唫嚍埐堻墐壗婜嫤嬐嬧寖嶜巹惍慬搢斳晉枃榗歏殣浕溍漌濅濜煡燼珒琎琻瑨璡璶盡砛祲竻笒紟紾緊縉肋臸荕菫菳蓳藎覲觔訡謹賮贐進釒釿鋟錦钅锓饉馸鹶黅齽',
jing => '竟静井惊经镜京净敬精景警竞境径荆晶鲸粳颈兢茎睛劲痉靖肼獍阱腈弪刭憬婧胫菁儆旌迳靓泾丼亰仱俓倞傹儬凈剄劤勁坓坕坙妌婙婛宑巠幜弳徑憼擏旍晟暻曔桱梷橸檠殑氏汫汬浄涇淨濪瀞烃烴燝猄獷璄璟璥痙秔稉穽竧竫競竸箐粇経經聙脛荊莖葝蜻蟼誩踁逕醒鋞鏡陉陘靑青靘靚靜頚頴頸颕驚鯨鵛鶁鶄麖麠鼱',
jiong => '窘炯扃迥侰僒冂冋冏囧坰垧埛宭扄昋泂浻澃瀅炅烱煚煛熒熲燑燛絅綗臦臩蘏蘔褧逈銄鎣顈颎駉駫',
jiu => '就九酒旧久揪救纠舅究韭厩臼玖灸咎疚赳鹫蹴僦柩桕鬏鸠阄啾丩乆乣倃剹勼匓匛匶噍奺廄廏廐愁慦捄揂揫摎朻杦柾樛橚殧氿汣湫湬牞畂稵穋窌糺糾紤繆缪舊舏萛蝤镹韮鬮鯦鳩鷲麔齨',
jou => '欍',
ju => '句举巨局具距锯剧居聚拘菊矩沮拒惧鞠狙驹且据柜桔俱车咀疽踞炬倨醵裾屦犋苴窭飓锔椐苣琚掬榘龃趄莒雎遽橘踽榉鞫钜讵枸仇伡佝侷俥倶僪冣凥劇勮匊告圧坥埧埾壉姐姖娵娶婅婮寠屨岠岨崌巈弆忂怇怐怚愳懅懼抅拠拱挙挶捄揈揟據擧昛梮椇椈檋櫸欅歫毩毱泃泦洰涺淗渠湨澽焗焣爠犑狊珇痀眗瞿砠租秬窶筥篓簍簴籧粔粷罝耟聥腒臄舉艍菹萭葅蒌蒟蒩蓻蔞蘜蘧處虡蚷蛆蜛螶袓襷詎諊豦貗趉趜趡足跔跙跼踘蹫蹻躆躹軥輂邭邹郥郰郹鄒鄹鉅鉏鋤鋦鋸鐻锄閰陱雏雛颶駏駒駶驕驧骄鬻鮈鮍鮔鲏鴡鵙鵴鶋鶪鼰鼳齟',
juan => '卷圈倦鹃捐娟眷绢鄄锩蠲镌狷桊涓隽劵勌勬呟圏埍埢奆姢嶲巂帣弮悁惓慻捲擐朘梋棬泫淃焆獧瓹甄眩睃睊睠絭絹縳罥羂脧腃臇菤萒蔨蕊蕋蜷裐襈讂踡身鋑鋗錈鎸鐫闂雋雟鞙韏飬餋鵍鵑',
jue => '决绝觉角爵掘诀撅倔抉攫嚼脚桷噱橛嗟觖劂爝矍镢獗珏崛蕨噘谲蹶孓厥乙亅傕刔勪匷叏吷啳埆壆夬妜孒屈屩屫崫嶡嶥弡彏憠憰戄挗捔撧斍柽橜欔欮殌氒決泬潏灍焆焳熦燋爑爴狂玃玦玨瑴璚疦瘚矞矡砄穱穴絕絶繑繘腳臄芵蕝蕞虳蚗蛙蟨蟩蠼袦覐覚覺觼訣誳譎貜赽趉趹蹷蹻躩較较逫鈌鐍鐝钁镼闋闕阕阙鞒鞽駃騤骙髉鱖鳜鴂鴃鶌鷢龣',
jun => '军君均菌俊峻龟竣骏钧浚郡筠麇皲捃儁勻匀呁埈姰寯懏攈旬晙桾汮濬焌焞燇狻珺畯皸皹碅箘箟莙葰蔨蚐蜠袀覠訇軍鈞銁銞鋆鍕陖隽雋餕馂駿鮶鲪鵔鵕鵘麏麕龜',
ka => '卡喀咯咖胩咔佧呿垰珈衉裃鉲',
kai => '开揩凯慨楷垲剀锎铠锴忾恺蒈凱剴劾勓喝喫嘅噄塏奒嵦幆愒愷愾暟核欬欯渇渴溘濭炌炏烗衉豈輆鍇鎎鎧鐦開闓闿雉颽',
kal => '乫',
kan => '看砍堪刊嵌坎槛勘龛戡侃瞰莰阚偘冚凵喊埳堿塪墈崁嵁惂扻栞檻欿歁監矙碪磡竷莶薟衎譼輡輱轁轗闞靬顑餡馅龕',
kang => '抗炕扛糠康慷亢钪闶伉匟囥坑奋嫝嵻忼摃杭槺沆漮犺砊穅粇荒躿邟鈧鏮閌阬骯鱇',
kao => '靠考烤拷栲犒尻铐丂嵪彀挢搞撟攷槀槁洘焅熇燺稾薧藳訄銬髛鮳鯌鲓',
ke => '咳可克棵科颗刻课客壳渴苛柯磕坷呵恪岢蝌缂蚵轲窠钶氪颏瞌锞稞珂髁疴嗑溘骒剋勀勊匼喀堁娔尅峇嵑嵙嶱悈愘愙揢搕敤榼樖欬歁殻毼渇濭炣牁犐痾盍砢硞碣碦磆礊礚窼簻緙翗胢艐萪薖衉袔課趷軻醘鈳鉿錁錒铪锕頦顆騍龕',
kei => '刻剋勀勊尅',
ken => '肯啃恳垦裉垠墾懇掯狠珢硍肎肻褃豤貇錹頎颀齦龈',
keng => '坑吭铿劥坈奟妔忐挳揁摼殸牼硁硍硎硜硻胫脛誙踁鉺銵鍞鏗铒阬',
ki => '怾',
kong => '空孔控恐倥崆箜埪宆悾椌涳矼硿穹羫腔躻錓鞚鵼',
kos => '廤',
kou => '口扣抠寇蔻芤眍筘叩佝冦剾劶妪嫗宼彄怐挎摳敂毆溝滱眗瞉瞘窛竘簆茠蔲釦鏂鷇',
ku => '哭库苦枯裤窟酷刳骷喾堀绔俈古嚳圐圣崫庫扝挎捁掘搰朏桍楛泏焅狜瘔矻硞秙窋絝胐袴褲趶跍跨郀鮬齁',
kua => '跨垮挎夸胯侉咵姱恗晇楇絓舿華蕐袔誇銙錁锞顝骻髁',
kuai => '快块筷会侩哙蒯浍郐狯脍傀儈凷噲圦塊墤巜廥擓旝會澮獪璯糩膾蒉蕢鄶駃鬠魁鱠鲙',
kuan => '宽款髋完寛寬梡棵欵歀窽窾鑧顆颗髖',
kuang => '矿筐狂框况旷匡眶诳邝纩夼诓圹贶哐丱儣兄劻匩卝壙岲廣忹恇懬懭抂昿曠枉況洭湟爌狅眖矌砿硄磺礦穬筺絋絖纊誆誑貺軖軠軦軭迋逛邼鄺鉱鋛鑛鵟黋',
kui => '亏愧奎窥葵魁馈盔傀岿匮愦揆睽跬聩篑喹逵暌蒉悝喟馗蝰隗夔刲匱卼嘳媿嬇尯巋巙憒戣晆楏楑樻櫆欳歸殨潰煃瞶磈窺簣籄缺聧聭聵胿腃膭臾蒍蕢藈蘬蘷虁虧觖謉踩蹞躨鄈鍨鍷鐀鑎闋闚阕頃頄頍頯顝顷餽饋騤骙溃',
kun => '捆困昆坤鲲锟髡琨醌阃悃卵堃堒壸壼婫尡崐崑晜梱涃混潉焜熴猑瑻睏硱祵稇稛綑罤臗菎蜫裈裍裩褌豤貇錕閫閸頑顽餛馄騉髠髨鯤鰥鳏鵾鶤鹍齦龈',
kuo => '阔扩廓适蛞栝会刳哙噋噲懖拡挄擴會桰漷濶燭爥秳筈萿葀邝鄺闊霩鞟鞹韕頢髺鬠括',
kweok => '穒',
kwi => '櫷',
la => '拉啦辣蜡腊喇垃蓝落瘌邋砬剌旯儠嚹揦揧搚摺擸攋柆楋櫴溂爉瓎癩磖翋臈臘菈藞蝋蝲蠟辢鑞镴鞡鬎鯻鱲癞',
lai => '来赖莱濑赉崃涞铼籁徕睐來俫倈勑厲唻娕婡崍庲徠懶攋梾棶櫴淶瀨瀬猍琜癩睞筙箂籟萊藾襰誺賚賴逨郲釐錸頼顂騋鯠鵣鶆麳黧癞',
lan => '蓝兰烂拦篮懒栏揽缆滥阑谰婪澜览榄岚褴镧斓罱漤僋儖厱啉嚂囒坔壈壏嬾孄孏嵐幱廩廪惏懔懢懶擥攔攬斕暕欄欖欗浨涟湅漣濫瀾灆灠灡炼煉燗燣爁爛爤爦璼瓓礷籃籣糷繿纜葻藍蘫蘭襕襤襴襽覧覽諫譋讕谏躝郴醂鑭钄闌韊顲',
lang => '浪狼廊郎朗榔琅稂螂莨啷锒阆蒗俍勆哴唥埌塱嫏崀悢朖朤桹樃樠欴烺瑯硠筤羮羹脼艆蓈蓢蜋誏踉躴郒郞鋃鎯閬駺',
lao => '老捞牢劳烙涝落姥酪络佬潦耢铹醪铑唠栳崂痨僗僚労勞咾哰嗠嘐嘮嫪嶗恅憥憦撈撩朥橑橯浶澇狫獠珯癆硓磱窂簩粩絡耮荖蓼蛯蟧軂轑銠鐒顟髝鮱',
le => '了乐勒肋鳓仂叻泐嘞忇扐楽樂氻牞玏砳竻簕艻阞韷餎饹鰳',
lei => '类累泪雷垒勒擂蕾肋镭儡磊缧诔耒酹羸嫘檑嘞傫儽卢厽咧塁壘壨攂樏櫐櫑欙洡涙淚漯灅瓃畾瘣癗盧矋磥礌礧礨祱禷絫縲纇纍纝罍脷腂蔂蕌藟蘱蘲蘽虆蠝誄讄轠郲銇錑鐳鑘鑸靁頛頪類颣鱩鸓鼺',
li => '里离力立李例哩理利梨厘礼历丽吏砾漓莉傈荔俐痢狸粒沥隶栗璃鲤厉励犁黎篱郦鹂笠坜苈鳢缡跞蜊锂悝澧粝蓠枥蠡鬲呖砺嫠篥疠疬猁藜溧鲡戾栎唳醴轹詈骊罹逦俪喱雳黧莅俚蛎娌仂位儮儷凓刕列剓剺劙勵厤厯厲叓叕叻唎嚟嚦囄囇塛壢娳婯孋孷屴岦峛峲巁廲悡悧悷慄扐扚捩搮擽攊攦攭斄暦曆曞朸柂栃栛栵梸棃棙樆檪櫔櫟櫪欐欚歴歷氂沴沵泣浬涖淚濼濿瀝灑灕爄爏犂犛犡珕珞琍瑮瓅瓈瓑瓥癘癧皪盠盭睝矖砅砬硌磿礪礫礰禮禲秝穲竰筣籬粚粴糎糲綟縭纅纚翮脷艃苙茘荲菞蒚蒞蔾藶蘺蚸蛠蜧蝕蝷蟍蟸蠇蠣蠫裏裡褵觻謧讈豊貍赲躒轢轣邌邐酈醨釃釐鉝銐鋫鋰錅錑鎘鏫鑗鑠铄镉隷隸離霾靂靋颯飒驪鬁鬴鯉鯏鯬鱧鱱鱳鱺鳨鴗鵹鷅鸝麗麜',
lia => '俩倆',
lian => '连联练莲恋脸炼链敛怜廉帘镰涟蠊琏殓蔹鲢奁潋臁裢濂裣楝亷令僆劆匲匳嗹噒堜奩娈媡嫾嬚孌慩憐戀挛搛摙撿攣斂梿槏槤櫣欄歛殮浰湅溓漣澰濓瀲煉熑燫瑓璉瞵磏稴簾籢籨練縺纞羷羸翴聨聫聮聯膦臉苓莶萰蓮薕薟蘝蘞螊褳襝覝謰譧蹥連鄻醶錬鍊鎌鏈鐮镧零鬑鰊鰱鱄',
liang => '两亮辆凉粮梁量良晾谅俩粱墚靓踉椋魉莨両俍倆倞兩哴唡啢喨悢惊掚樑涼湸煷簗糧綡緉脼蜋蜽裲諒蹒蹣輌輛輬辌鍄閬阆靚駺魎冫',
liao => '了料撩聊撂疗廖燎辽僚寥镣潦钌蓼尥寮缭獠鹩嘹佬僇劳勞嫽尞尦屪嵺嶚嶛廫憀憭摎敹暸樛漻炓爎爒璙療瞭窷竂簝繚膋膫蟉蟟蟧豂賿蹘蹽轑遼鄝釕鏐鐐镠镽飂飉髎鷯',
lie => '列裂猎劣烈咧埒捩鬣趔躐冽洌例倈儠劦劽哷埓奊姴峢巁巤忚挒挘擸栗棙櫑毟浖烮煭燤爄爉犣猟獵睙綟聗脟膊臘茢蛚迾邋颲鬛鮤鱲鴷',
lin => '林临淋邻磷鳞赁吝拎琳霖凛遴嶙蔺粼麟躏辚廪懔瞵檩膦啉亃任伈僯凜厸壣崊廩恡悋惏懍撛斴晽暽橉檁涁渗滲潾澟瀶焛燐獜玪璘甐疄痳癛癝碄稟箖粦繗翷臨菻藺賃蹸躙躪轔轥鄰鏻閵阴隣顲驎魿鱗麐',
ling => '另令领零铃玲灵岭龄凌陵菱伶羚棱翎蛉苓绫瓴酃呤泠棂柃鲮聆囹倰冷刢坽夌姈婈孁岺崚嶺彾怜拎掕昤朎櫺欞淩澪瀮炩燯爧狑琌皊砱磷祾秢竛笭紷綾舲蓤蔆蕶蘦衑袊裬詅跉軨輘醽釘鈴錂钉閝阾霊霗霛霝靇靈領駖魿鯪鴒鸰鹷麢齡齢龗',
liu => '六流留刘柳溜硫瘤榴琉馏碌陆绺锍鎏镏浏骝旒鹨熘遛偻僂劉嚠塯媹嬼嵧廇懰抡斿旈栁桞桺橊橮沠泖泵游漻澑瀏熮珋瑠瑬璢畂畄畱疁癅磂磟綹罶羀翏聊膢蒌蒥蓅蓼蔞藰蟉裗蹓鉚鋶鎦鏐鐂铆镠陸雡霤飀飂飅飗餾駠駵騮驑鬸鰡鶹鷚鹠麍',
lo => '咯囖',
long => '龙拢笼聋隆垄弄咙窿陇垅胧珑茏泷栊癃砻儱厐哢嚨壟壠宠寵屸嶐巃巄庞徿总攏昽曨朧梇槞櫳湰滝漋瀧爖瓏眬矓硦礱礲竉竜篢篭籠聾蕯蘢蝕蠪蠬衖襱谾豅贚躘鏧鑨隴霳靇驡鸗龍龐龒龓',
lou => '楼搂漏陋露娄篓偻蝼镂蒌耧髅喽瘘嵝僂嘍塿婁寠屚嶁廔慺摟樓溇漊熡牢甊瘺瘻瞜窶簍耬膢艛蔞螻謱軁遱鏤鞻髏',
lu => '路露录鹿陆炉卢鲁卤芦颅庐碌掳绿虏赂戮潞禄麓六鲈栌渌蓼逯泸轳氇簏橹辂垆胪噜镥辘漉撸璐鸬鹭舻侓僇剹勎勠嗠嚕嚧圥坴塶塷壚娽峍廘廬彔挔捋捛摅摝擄擼攄攎枦椂樐樚櫓櫨氌淕淥滤滷漊澛濾瀂瀘熝爐獹玈琭璷瓐甪瘳盝盧睩矑硉硵磠祿稑穋箓簬簵簶籙籚粶緑纑罏翏肤膔膚膟臚舮艣艪艫菉蓾蔍蕗蘆虂虜螰蠦角觮觻谷賂趢踛蹗輅轆轤鄜酪醁鈩錄録錴鏀鏕鏴鐪鑥鑪陸顱騄騼髗魯魲鯥鱳鱸鴼鵦鵱鷺鸕鹵黸',
luan => '乱卵滦峦孪挛栾銮脔娈鸾乿亂圝圞奱孌孿巒攣曫欒灓灤癴癵羉脟臠臡薍虊覶釠鑾鵉鸞',
lue => '略掠锊剠圙寽擽率畧稤药藥詻鋝鋢',
lun => '论轮抡伦沦仑纶囵侖倫圇埨婨崘崙惀掄棆淪溣睔碖磮稐綸耣腀菕蜦論踚輪錀陯鯩',
luo => '落罗锣裸骡烙箩螺萝洛骆逻络咯荦漯蠃雒倮硌椤捋脶瘰摞泺珞镙猡乐儸儽剆啰囉峈挼捰攎攞攭曪果格樂橐櫟欏欙濼烁爍犖猓玀癳皪砢硦碌礫笿籮絡纙羅腡臝茖蓏蘿蛒蜾蝸蠡袼覶覼詻跞路躒躶邏鉻鎯鏍鑼铬頱饠駱騾驘鮥鱳鵅鸁',
lv => '绿率铝驴旅屡滤吕律氯缕侣虑履偻膂榈闾捋褛稆侶儢勴卛卢呂哷垏壘娄婁寠寽屢嵂庐廬慮慺曥梠樓櫖櫚櫨氀焒爈瘻盧瞜祣穞穭箻篓簍累絽綠緑縷繂膐膢葎蒌蔞藘褸謱軁郘鋁録鏤鑢镂閭馿驢魯鲁鷜鹿',
m => '呒呣嘸',
ma => '吗妈马嘛麻骂抹码玛蚂摩唛蟆犸嬷杩么亇傌呐嗎嘜媽嫲嬤孖尛榪溤犘獁瑪痲睰碼礣祃禡罵蓦蔴螞蟇貉貊遤鎷閁靡馬駡驀鬕鰢鷌麼麽',
mai => '买卖迈埋麦脉劢霾荬佅勱咪哩嘪売派脈蕒薶衇貍買賣邁霡霢鷶麥唛',
man => '满慢瞒漫蛮蔓曼馒埋谩幔鳗墁螨镘颟鞔缦熳僈姏嫚屘幕悗慲摱槾樠満滿澫澷獌睌瞞矕絻縵蔄蘰蟃蟎蠻襔謾蹒蹣鄤鏋鏝顢饅鬗鬘鰻',
mang => '忙芒盲莽茫氓硭邙蟒漭厖吂哤壾娏尨庬恾朚朦杗杧汒浝牤牻狵甿痝盳瞢硥笀茻莾蘉蛖蠎釯鋩铓駹鸏鹲龍龒龙',
mao => '毛冒帽猫矛卯貌茂贸铆锚茅耄茆瑁蝥髦懋昴牦瞀峁袤蟊旄泖侔冃冇冐勖務堥夘媢嵍愗戼描暓枆楙毣毷氂渵牟犛獏皃眊秏笷緢罞耗芼萺蓩蛑蝐覒貇貓貿軞鄚鄮酕鉚鉾錨霿髳鶜',
me => '么嚒嚜嚰孭庅濹癦麼麽',
mei => '没每煤镁美酶妹枚霉玫眉梅寐昧媒糜媚谜沫嵋猸袂湄浼鹛莓魅镅楣凂呅味嚜坆坶堳塺墨媄媺嬍嵄徾抺挴攗攟某栂楳槑櫗毎氼沒沬渼湈溦煝燘珻瑂痗眊眛睂睸矀祙禖篃羙脄脢腜膴苺葿蘪蝞跊躾郿鋂鎂鎇韎鬽鶥黣黴',
men => '门们闷懑扪钔焖亹們怋悗悶惛懣捫暪椚殙汶満满滿燜玟玣玧璊瞞穈菛虋鍆門閅鞔',
meng => '猛梦蒙锰孟盟檬萌氓礞蜢勐懵甍蠓虻朦艋艨瞢儚冡夢夣嫇尨幪庬懜懞掹擝明曚橗氋溕濛獴瓾甿瞑矇矒罞莔萠蕄蝱蟊蟒鄳鄸鋂錳雺霚霥霧霿靀顭饛髳鯍鯭鱦鸏鹲黽黾鼆',
meo => '踎',
mi => '米密迷眯蜜谜觅秘弥幂靡糜泌醚蘼縻咪汨麋祢猕弭谧芈脒宓敉嘧糸侎冖冞冪劘哋塓孊宻尒尓尔峚幎幦幺彌戂摩摵擟擵攠榓樒檷櫁沕沵洣淧渳溟滵漞濔濗瀰灖熐爢爾獯獼瓕眫眽瞇瞴祕禰穈簚籋粎罙羃羋苾葞蒾蓂蔝蔤藌蝆袮覓覔覛詸謎謐辟醾醿釄銤鑖镾鸍麊麛鼏',
mian => '面棉免绵眠缅勉冕娩腼湎眄沔黾渑丏俛偭冥勔厸喕婂媔嬵愐檰櫋汅泯湣澠牑瞑矈矊矏糆絻綿緍緜緡緬缗臱芇莬葂蝒蠠靣靦鮸麪麫麵麺黽宀',
miao => '秒苗庙妙描瞄藐渺眇缪缈淼喵杪鹋邈仯吵媌嫹庿廟彯猫玅竗篎紗緢緲纱蜱訬鱙鶓',
mie => '灭蔑咩篾蠛乜吀咪哶孭幭懱搣櫗滅瀎眜薎衊覕谂鑖鱴鴓',
min => '民抿敏闽皿悯珉愍缗闵玟苠泯黾鳘岷僶冧冺刡勄呡垊姄崏忞怋慜憫捪敃敯旻旼暋汶渂湏湣潣琘琝瑉痻盷盿眠砇碈笢笽簢緍緡繩绳罠蠠賯鈱錉鍲閔閩鰵鴖黽',
ming => '名明命鸣铭螟盟冥瞑暝茗溟酩佲凕姳嫇慏掵朙榠洺猽眀眳萌蓂覭詺鄍銘鳴',
miu => '谬缪繆謬',
mo => '摸磨抹末膜墨没莫默魔模摩摹漠陌蘑脉沫万无冒寞秣瘼殁镆嫫谟蓦貊貘麽茉馍耱么伯佰劘劰勿嗼嚤嚩圽塻妺嫼尛帓帕帞怽懡戂抚撫擵攠昧昩暯枺橅歾歿沒瀎無爅狢百皌眜眽眿瞐瞙砞礳粖糢絈絔縸纆艒莈藐藦蛨蟆蟔袜袹謨謩譕貃貈貉貌銆鏌靺鞨饃饝驀髍魩魹麼麿黙嘿嬷',
mou => '某谋牟眸蛑鍪侔缪哞件劺厶呣堥婺恈敄桙毋洠瞴繆蟱袤謀鉾鞪鴾麰蝥',
mu => '木母亩幕目墓牧牟模穆暮牡拇募慕睦姆姥钼毪坶沐仫苜凩墲娒婺峔幙慔朷楘樢毣氁炑牳狇獏畆畒畝畞畮砪縸繆缪胟艒茻莯萺蚞踇鉧鉬雮霂鞪呒嘿',
myeo => '旀',
myeon => '丆',
myeong => '椧',
n => '嗯咹哏',
na => '那拿哪纳钠娜呐南衲捺镎肭乸內内吶呶嗱妠抐拏挐淰秅笚笝箬篛納絮蒘蒳袦訤詉誽豽貀蹃軜郍鈉鎿雫靹魶',
nai => '乃耐奶奈氖哪萘艿柰鼐佴倷妳嬭孻廼掜搱摨渿熋疓耏能腉螚褦迺釢錼',
nan => '难南男赧囡蝻楠喃腩侽囝妠娚婻嫨弇戁抩揇摊攤暔枏枬柟湳滩灘煵畘莮萳諵遖難颌',
nang => '囊馕曩囔攮乪儾哝噥嚢崀憹搑擃欜涳瀼灢蘘蠰譨饢鬞齉',
nao => '闹脑恼挠淖孬铙瑙垴呶蛲猱硇匘堖夒婥嫐峱嶩巎巙怓悩惱憹撓橈檂浇澆獶獿碙碯脳腝腦臑蝚蟯詉譊鐃閙鬧',
ne => '呢哪那呐讷吶抐疔眲訥疒',
nei => '内哪馁那內娞婑氝浽脮腇錗餒餧鮾鯘',
nem => '焾',
nen => '嫩恁媆嫰枘腝臑',
neng => '能竜而耐螚',
neus => '莻',
ng => '嗯',
ngag => '鈪',
ngai => '銰',
ngam => '啱',
ni => '你泥拟腻逆呢溺倪尼匿妮霓铌昵坭祢猊伲怩鲵睨旎伱儗儞児兒埿堄妳婗嫟嬭嬺孨孴屔屰嶷彌惄愵慝懝抐抳掜擬晲暱柅棿檷氼淣滠濔濘瀰灄狔痆眤禰秜籾縌聻胒腝膩臡苨薿蚭蛪蜺袮觬誽譺貎跜輗迡郳鈮鉨鑈镾隬馜鯢麑齯',
nian => '年念捻撵拈碾蔫粘廿黏辇鲇鲶埝卄哖唸姩捵撚攆榐涊淰溓痆秊秥簐艌趁趂跈蹍蹨躎輦輾辗鮎鯰鵇',
niao => '鸟尿袅茑脲嬲嫋嬝尥尦樢溺茮蔦裊褭鳥',
nie => '捏镍聂孽涅镊啮陧蘖嗫臬蹑颞乜倪喦噛嚙囁囐囓囡圼埝孼峊嵒嵲嶭巕帇幸惗捻掜揑摂摄摰攝敜枿棿槷櫱痆篞籋糱糵聶肀臲苶菍蠥褹諗讘踂踗踙躡鉨鉩銸鋷錜鎳鑈鑷钀闑隉顳齧',
nin => '您恁囜拰脌',
ning => '拧凝宁柠狞泞佞甯咛聍侫儜冰嚀嬣寍寕寗寜寧年擰攘橣檸澝濘獰疑矃聹苧薴鑏鬡鬤鸋',
niu => '牛扭纽钮拗妞狃忸怓抝杻汼沑炄牜紐莥蚴鈕靵',
nong => '弄浓农脓哝侬儂咔噥憹挊挵欁濃癑禯秾穠繷膿莀蕽襛農辳醲齈廾',
nou => '耨啂嬬搙擩槈檽獳羺譨譳鎒鐞',
nu => '怒努奴孥胬驽弩仅伖伮傉呶帑搙擩砮笯褥詉駑',
nuan => '暖奻渜湪濡煖煗餪',
nue => '虐疟谑硸',
nun => '黁',
nung => '燶',
nuo => '挪诺懦糯娜喏傩锘搦儺吶呐哪堧媠嫷愞懧掉掿搙搻梛榒橠毭渪稬穤糑糥耎袲袳諾蹃逽那郍鍩难難需',
nv => '女衄钕恧朒沑狃籹絮聏肭衂釹',
nve => '婩疟瘧虐',
o => '哦喔噢筽',
oes => '夞',
ol => '乯',
on => '昷鞰',
ou => '偶呕欧藕鸥区沤殴怄瓯讴耦區吘吽嘔塸慪抠握摳敺櫙歐毆渥漚澫熰甌紆纡腢膒蓲蕅藲謳遇醧鏂鴎鷗齵',
pa => '怕爬趴啪耙扒帕琶派筢杷葩叭吧妑帊把掱汃潖皅舥芭苩袙跁鈀钯',
pai => '派排拍牌迫徘湃哌俳蒎啡棑椑犤猅箄簰脾腗輫鎃',
pak => '磗',
pan => '盘盼判攀畔潘叛磐番般胖襻蟠袢泮拚爿蹒乑伴冸半卞坢姍姗媻审宷審幋弁彦扳拌搫柈槃沜洀湴溿瀊瀋炍片牉牓畨皤盤盻眅眫碆磻籓縏繁膰蒰螌褩詊跘踫蹣鄱鋬鎜鑻闆鞶頖鵥',
pang => '旁胖耪庞乓膀磅滂彷逄螃仿傍厐嗙夆嫎尨彭徬房方汸沗炐篣肨胮膖舽蒡蠭覫趽逢鎊镑雱霶髈鰟鳑龎龐',
pao => '跑抛炮泡刨袍咆狍匏庖疱脬包嚗垉奅抱拋摽炰爮犥瓟皰砲礟礮穮窌胞脟苞萢藨蚫袌褜謈軳鉋铇鞄颮飑鮑鲍麃麅麭',
pei => '陪配赔呸胚佩培沛裴旆锫帔醅霈辔伂俖倍啡坏垺妃妚姵婄媐嶏怌抷掊攈斾昢柸棑毰浿淠犻珮琣琲笩肧艴茇茷蓜蜚衃裵賠轡錇阫陫馷駍',
pen => '喷盆湓吩呠喯噴本歕汾濆瓫翉翸葐衯',
peng => '碰捧棚砰蓬朋彭鹏烹硼膨抨澎篷怦堋蟛嘭亨倗傍傰剻匉塜塳庄弸恲憉挷掽搒摓旁梈椖椪槰樥泙淎淜滂漨漰熢痭皏硑磞稝竼篣絣纄胓芃苹荓莑蟚踫軯軿輣輧迸逢逬錋鑝閛韸韼駍騯髼鬅鬔鵬',
peol => '浌',
phas => '巼',
phdeng => '闏',
phoi => '乶',
phos => '喸',
pi => '批皮披匹劈辟坯屁脾僻疲痞霹琵毗啤譬砒否貔丕圮媲癖仳擗郫甓枇睥蜱鼙邳吡陂铍庀罴埤纰陴淠噼蚍裨伓伾俾副卑噽嚊嚭坏培壀妚嫓岯崥嶏帔庇庳怶悂憵扑抷拂揊旇朇枈椑榌比毘毞渒潎澼濞炋焷狉狓猈疈疋痦痺睤磇礔礕秛秠稫笓箆篦篺簲粃紕罷羆翍耚肶脴腗膍芘苉苤萆蕃蚌蚽蚾螕螷蠯被諀豼豾鄱釽鈈鈚鈲鈹鉟銔銢錃錍鎞钚闢阰隦鞞頗顖颇駓髬魮魾鮍鲏鴄鵧鷿鸊',
pian => '片篇骗偏便扁翩缏犏骈胼蹁谝囨媥平徧楄楩猵璸緶腁萹蝙褊覑諚諞貵賆跰辩辯駢騈騗騙骿魸鶣',
piao => '票飘漂瓢朴螵莩嫖瞟殍缥嘌骠剽僄勡彯徱慓摽旚潎犥皫磦篻縹翲膘蔈薸謤醥闝顠飃飄驃驫骉魒髟',
pie => '瞥撇氕苤丿嫳撆暼潎肺蔽覕鐅',
pin => '品贫聘拼频嫔榀姘牝颦匕嚬娉嬪拚朩汖泵玭琕矉砏礗穦薲蘋貧頻顰馪驞',
ping => '平凭瓶评屏乒萍苹坪冯娉鲆枰俜倗凴呯塀娦屛岼帡帲幈慿憑檘泙洴涄淜焩玶甁甹砯砰硑竮箳簈缾聠胓艵荓蓱蘋蚲蛢評軿輧郱鉼頩馮鮃冖秤',
po => '破坡颇婆泼迫泊魄朴繁粕笸皤钋陂鄱攴叵珀钷哱嘙奤娝尀尃屰岥岶巿廹搫敀昢桲椺櫇洦淿湐溌溥潑濼烞猼皛砶翍膊蒪蔢謈跛酦醱釙鉕鏺霸頗馞駊髆泺',
pou => '剖掊裒吥咅哣垺培堷婄抔抙抱捊棓涪犃箁裦褒襃踣部郶錇锫颒',
ppun => '兺哛',
pu => '扑铺谱脯仆蒲葡朴菩莆瀑埔圃浦堡普暴镨噗匍溥濮氆蹼璞镤僕剝剥卜圑圤墣巬巭扶抪捗撲擈攴暜柨樸檏潽炇烳獛甫痡瞨砲秿穙箁纀舖舗苻荹菐蒱蜅襆襥諩譜豧贌酺鋪鏷鐠陠駇鯆鵏攵曝',
q => '瑁',
qi => '起其七气期齐器妻骑汽棋奇欺漆启戚柒岂砌弃泣祁凄企乞契歧祈栖畦脐崎稽迄缉沏讫旗祺颀骐屺岐蹊萁蕲桤憩芪荠萋芑汔亟鳍俟槭嘁蛴綦亓欹琪麒琦蜞圻杞葺碛淇祗耆绮丌亝伎倛偈傶僛切刺剘勤吃吱呇呮咠唘唭啓啔啟喰噐埼夡娸婍宿岓嵜己帺忔忮忯忾恓恝悽愒愭愾慼慽憇懠扢扱扺技抵拞挈捿掑揭摖支攲敧斉斊旂晵暣朞枝栔桼梩棄棊棨棲榿檱櫀欫毄気氣洓济淒済渍渏湆湇滊漬濝濟炁焏猉玂玘璂甈甭畸疧盀盵矵碁碕碶磎磜磧磩礘示祇禥禨稘竒簯簱籏粸紪絜綥綨綮綺緀緕緝纃缼罊肐肵臍舙艩芞萕薺藄蘄蚑蚔蚚蜝螇螧蟣蟿蠐衹袳裿褀褄觭訖諆諬諿豈趞趿跂踑踖踦躤躩軙軝迉逗邔郪鄿釮錡鏚鐖锜闙隑霋頎饑騎騏騹鬐鬾鬿魌魕鮨鯕鰭鲯鵸鶀鶈麡鼜齊齮',
qia => '恰卡掐洽髂袷葜佉價冾咭圶客帢愘抲拤挈揢搳擖楬殎疴矻硈磍絜跒酠鞐鮚鲒',
qian => '前钱千牵浅签欠铅嵌钎迁钳乾谴谦潜歉纤扦遣黔堑仟岍钤褰箝掮搴倩慊悭愆虔芡荨缱佥芊阡肷茜椠犍骞乹仱伣俔偂傔僉儙凄凵刋厱唊嗛圱圲塹墘壍奷婜媊嬱孅孯寨岒嵰廞忏忴悓慳扲拑拪挳掔揃揵摼撁撍撖攐攑攓朁杄杴柑棈榩槏槧橬檶櫏欦欿歁歬汘汧涔淒淺渐湔漸潛濳濽灊灒炶煔熑燂燫牽皘竏筋箞篏篟簽籖籤粁綪縴繾羟羥羬脥腱膁臤艌苂茾荕葥葴蒨蔳蕁藖蚈蚙蜸諐謙譴谸赶軡輤遷釺鈆鈐鉆鉗鉛銭鋟錎錢鍼鎆鏲鐱鑓鑯锓開雃靬韆顅馯騚騝騫鬜鬝鰜鰬鳒鳽鵮鶼鹐鹣黚齦龈',
qiang => '强枪墙抢腔呛羌蔷将蜣跄戗襁戕炝镪锖锵羟樯嫱創勥哐唴啌嗆嗴墏墻嬙將嶈庆廧強彊慶戧控搶摤摪斨椌槍檣殻溬漒熗爿牄牆猐獇玱琷瑲矼箐篬繈繦羗羥羫羻艢蔃薔蘠親謒跫蹌蹡錆鎗鏘鏹顩鶬鸧',
qiao => '桥瞧敲巧翘锹壳鞘撬悄俏窍雀乔侨峭橇樵荞跷硗憔谯鞒愀缲诮劁偢僑僺削勪喬喿嘺噭塙墝墧墽嫶峤嵪嶠帩幓幧愁招捎搞摮撽敫校槗橋橾殼毃毳潐焦焳燆燋犞癄睄硚硝碻磝磽礄礉窯竅箾繑繰翹茭荍菬蕉蕎藮蟜誚譑譙趫趬跤踃踍蹺蹻躈郻鄗鄡鄥醮釥銚鍫鍬鏒鐈鐰铫陗鞩鞽韒頝顤顦驕骄骹髚髜',
qie => '切且怯窃茄砌郄趄惬锲妾箧慊伽挈倢倿偼匧厒唼喋契婕媫帹悏愜捷朅椄沏洯淁漆疌癿稧穕竊笡篋籡緁聺脞苆蕺藒蛣蛪詧跙踥鍥鐑魥鯜鰈鲽',
qin => '亲琴侵勤擒寝秦芹沁禽钦吣覃矜衾芩溱廑嗪螓噙揿檎锓儭厪吢唚坅埁埐堇墐媇嫀寑寢寴嵚嶔嶜庈廞忴慬懃懄扲抋捦搇撳斳昑梫槿橬櫬欽浸涁渗滲澿濅瀙珡琹瘽矝笉綅耹肣臤菣菦菳蓁蕲藽蘄蚙螼蠄衿親誛赺赾鈂鈊鈙鋟雂靲頜顉顩颌駸骎鬵鮼鳹',
qing => '请轻清青情晴氢倾庆擎顷亲卿氰圊謦檠箐苘蜻黥罄鲭磬綮倩傾儬凊剠勍啨埥声夝媇寈庼廎慶掅擏暒棾樈檾櫦殑殸氫涇淸渹漀濪玪甠硘硜碃精綪胜莔葝請軽輕郬鑋靑靘頃鯖鶄',
qiong => '穷琼跫穹邛蛩茕銎筇儝卭嬛宆惸憌桏橩焪焭煢熍琁璚瓊瓗睘瞏窮竆笻舼藑藭蛬赹鞠',
qiu => '求球秋丘泅仇邱囚酋龟楸蚯裘糗蝤巯逑俅虬赇鳅犰湫鼽遒丠区厹叴唒团坵媝宿寈崷巰恘惆愀扏捄搝朹梂櫹殏毬氽氿汓浗渞湬湭煪牫玌璆皳盚秌穐篍紌絿緧肍艽莍萩蓲蘒虯蛷蝵蟗蠤觓觩訄訅賕趜趥逎邺醔釓釚釻銶钆鞦鞧馗鮂鯄鰌鰍鰽鱃鳩鵭鶖鸠鹙龜龝',
qu => '去取区娶渠曲趋趣屈驱蛆躯龋戌蠼蘧祛蕖磲劬诎鸲阒麴癯衢黢璩氍觑蛐朐瞿岖苣伹佉佢刞匤匷區厺句呿坥岨岴嶇巨弆忂怚憈戵抾敺斪欋欪毆浀淭灈焌璖竘竬筁籧粬紶組絇组翑翵耝胊胠脥臞菃葋蚼蜡蝺螶蟝蠷衐袪覰覷覻詓詘誇誳趍趜趨跔跙跼躣軀軥迲遽郥鉤鐻鑺閴闃阹鞠鞫駆駈騶驅驺髷魼鮈鰸鱋鴝鶌鸜麮麯麹鼁鼩齲匚',
quan => '全权劝圈拳犬泉券颧痊醛铨筌绻诠辁畎鬈悛蜷荃佺勧勸卷啳圏圳埢姾婘孉峑巏巻弮恮惓拴捲搼栒桊棬椦楾槫権權汱洤湶灥烇牶牷犈獾琯瑔甽矔硂純絟綣縓纯腃葲虇蠸觠詮謜譔跧踡輇酄銓鐉闎韏顴駩騡鰁鳈鸛鹳齤犭',
que => '却缺确雀瘸鹊炔榷阙阕悫傕决卻埆塙墧屈崅愨慤搉攉敠殻毃汋決燩猎獡皵硞碏確碻礐礭舃舄芍蒛蚗趞踖躤闋闕隺鳥鵲',
qun => '群裙麇逡囷夋宭峮帬歏箘羣裠踆輑遁麏麕',
ra => '亽罖',
ram => '囕',
ran => '染燃然冉髯苒蚺冄卪呥嘫姌媣柟橪熯珃繎肰舑蒅蚦衻袇袡蹨髥',
rang => '让嚷瓤攘壤穰禳儴勷壌孃忀懹欀瀼爙獽穣纕蘘蠰譲讓躟鑲镶鬤',
rao => '饶绕扰荛桡娆嬈挠撓擾橈犪穘繚繞缭蕘蟯襓遶隢饒',
re => '热若惹喏偌捼渃熱蹃',
ren => '人任忍认刃仁韧妊纫壬饪轫仞荏葚衽稔仭儿刄姙屻忈忎恁扨朲杒栠栣梕棯涊牣秂秹紉紝絍綛纴肕腍芢荵菍袵訒認讱躵軔釰鈓銋靭靱韌飪餁魜鵀亻',
ri => '日囸氜釰鈤馹驲',
rong => '容绒融溶熔荣戎蓉冗茸榕狨嵘肜蝾傇傛坈媶嫆嬫宂峵嵤嶸巆搈搑摉曧栄榮榵毧氄瀜烿爃瑢穁穃絨縙縟缛羢茙螎蠑褣軵鎔镕隔頌颂駥髶',
rou => '肉揉柔糅蹂鞣厹媃宍楺渘煣瑈瓇禸粈腬莥葇蝚輮鍒鑐韖騥髳鰇鶔',
ru => '如入汝儒茹乳褥辱蠕孺蓐襦铷嚅缛濡薷颥溽洳侞偄吺咮嗕女媷嬬嶿帤扖挐擩曘月杁桇檽渪燸獳筎縟繻肉肗臑蒘蕠袽込邚鄏醹銣鑐需顬鱬鳰鴑鴽',
rua => '挼',
ruan => '软阮朊偄堧壖媆嫰愞撋檽渪濡燸瑌瓀碝礝緛耎腝蝡軟輭需',
rui => '瑞蕊锐睿芮蚋枘蕤兊兌兑內内叡壡婑惢抐撋桵棁橤汭甤笍綏緌繠绥苼蕋蘂蘃蜹踒鈉銳鋭鏸钠',
run => '润闰撋橍潤閏閠',
ruo => '若弱箬偌叒婼嵶惹挼捼撋楉渃溺焫爇篛芮蒻鄀鰙鰯鶸',
sa => '撒洒萨挲仨卅飒脎摋攃桬檫櫒殺泧潵灑纚蔡蕯薩訯躠鈒鎝鏾钑隡霅靸鞈颯馺',
saeng => '栍',
sai => '塞腮鳃思赛噻僿嗮嘥愢揌毢毸簑簺賽顋鰓',
sal => '乷虄',
san => '三散伞叁馓糁毵霰俕傘傪厁参參叄叅壭帴弎橵毶毿潵犙糂糝糣糤繖蔘謲鏒鏾閐饊鬖彡氵',
sang => '桑丧嗓颡磉搡喪桒槡纕褬鎟顙',
sao => '扫嫂搔骚梢埽鳋臊缫瘙哨慅懆掃掻橾氉溞煰燥矂縿繅繰缲鄵鐰颾騒騷髞鯵鰠鰺鱢鲹',
se => '色涩瑟塞啬铯穑嗇寨廧愬懎拺擌栜槭歮歰泣洓渋渍溹漬澀澁濇濏瀒琗璱瘷穡穯粣繬蔷薔虩譅轖鉍銫鎍鎩鏼铋铩闟雭飋',
sed => '裇',
sei => '涁聓',
sen => '森掺摻槮渗滲篸襂',
seng => '僧鬙',
seo => '閪',
seon => '縇',
sha => '杀沙啥纱傻砂刹莎厦煞杉嗄唼鲨霎铩痧裟挲歃乷倽儍剎唦啑喢噎帹廈挱接摂摄摋攝榝樧殺濈猀硰箑粆紗繌繺翜翣菨萐蔱賒賖赊鎩閯閷霅魦鯊鯋',
shai => '晒筛色酾摋攦曬殺篩簁簛籭繺術諰閷',
shan => '山闪衫善扇杉删煽单珊掺赡栅苫掸膳陕汕擅缮嬗蟮芟禅跚鄯潸鳝姗剡骟疝膻讪钐舢埏傓僐僤儃儋刪剼単單嘇圸墠墡壇姍嶦幓挻掞搀搧摻擔攙敾晱曏曑杣柵椫樿檀檆櫼潬澘澹灗炶烻煔熌狦猭痁睒磰禪穇笘笧縿繕纔羴羶脠葠蔪蟬蟺襂襳覢訕謆譱贍赸軕邓邖釤銏鐥閃閄閊陝顃顫颤饍騸鯅鱓鱔鱣鳣彡凵髟',
shang => '上伤尚商赏晌墒汤裳熵觞绱殇垧丄仩傷场埫場塲尙恦愓慯扄殤湯滳漡禓緔蔏螪蠰觴謪賞踼鑜鞝鬺',
shao => '少烧捎哨勺梢稍邵韶绍芍召鞘苕劭潲艄蛸筲佋削卲娋弰招搜旓柖溲焼燒燿玿睄笤紹綃綤绡莦萔萷蕱袑輎鞩韒颵髾鮹杓',
she => '社射蛇设舌摄舍折涉赊赦慑奢歙厍畲猞麝滠佘厙奓弽慴懾抴拾挕捨揲摂摵攝檨欇涻渉灄畬睫碟磼聂聶舎葉蔎虵蛞蛥蠂設賒賖輋闍阇鞨韘騇',
shen => '身伸深婶神甚渗肾审申沈绅呻参砷什娠慎葚糁莘诜谂矧椹渖蜃哂胂伔侁侺信兟參叄叅吲嘇堔妽姺嫀嬸孞宷審屾峷幓弞愼扟抌抻搷昚曋柛棯椮榊槮氠涁淰滲瀋燊珅甡甧瘆瘮眒眘瞋瞫矤祳穼籶籸紳綝罙罧脤腎葠蓡蔘薓蜄裑覾訠訷詵諗讅谉邥鉮鋠震頣駪魫鯅鯓鯵鰰鰺鲹鵢黮',
sheng => '声省剩生升绳胜盛圣甥牲乘晟渑眚笙嵊丞乗偗冼剰勝呏垩墭姓娍媵憴斘昇晠曻枡榺橳殅殸泩渻湦澠焺狌珄琞甸竔箵縄繩聖聲苼蕂譝貹賸鉎鍟阩陞陹鱦鵿鼪',
shi => '是使十时事室市石师试史式识虱矢拾屎驶始似嘘示士世柿匙拭誓逝势什殖峙嗜噬失适仕侍释饰氏狮食恃蚀视实施湿诗尸豕莳埘铈舐鲥鲺贳轼蓍筮炻谥弑酾螫丗乨亊佀佦兘冟勢卋厔叓呞呩咶唑啇噓埶堤塒奭姼媞嬕実宩宲寔實寺屍峕崼嵵師弒彖徥忕忯恀惿戺提揓斯旹昰時枾柹栻楴榁榯檡汁沶洂浉液湜湤溡溮溼澤澨濕烒煶狧狶獅瑡畤痑眂眎眡睗礻祏禵秲竍笶笹筛箷篒篩簭籂籭絁繹绎耆肢胑舍舓葹蒒蒔蝕蝨褆褷襫襹視觢訑試詩諟諡謚識貰赫跩軾辻遈遞適遰遾邿郝醳釃釈釋釶鈰鉂鉃鉇鉈鉐鉽銴鍉鍦鎩铊铩飠飭飾餙餝饣饬馶駛魳鮖鯴鰘鰣鰤鳲鳾鶳鸤鼫鼭齛齥',
shou => '手受收首守瘦授兽售熟寿艏狩绶収嘼垨壽夀扌掱敊涛涭濤獣獸痩綬膄醻鏉',
shu => '书树数熟输梳叔属束术述蜀黍鼠淑赎孰蔬疏戍竖墅庶薯漱恕枢暑殊抒曙署舒姝摅秫纾沭毹腧塾菽殳澍倏侸俆俞俶倐儵兪咰售嗽娶婌孎尌尗屬庻忬怷悆捈捒掓揄攄數暏書朮朱杸杼柕樞樹橾毺氀涑潄潏潻濖瀭焂瑹璹疋疎癙稌竪籔糬紓紵絉綀翛荗荼蒁蒣薥薮藪藷虪蠴蠾術裋襡襩謶豎豫贖跾踈軗輸透鄃野鉥錰鏣鐲镯陎除隃鮛鱪鱰鵨鶐鷸鸀鹬鼡忄丨',
shua => '刷耍唰唆涮誜选選',
shuai => '摔甩率帅衰蟀卛帥綏縗绥缞',
shuan => '栓拴闩涮專栒槫汕腨踹閂',
shuang => '双霜爽泷孀傱塽孇慡樉欆淙滝漺瀧灀礵縔艭鏯雙騻驦骦鷞鸘鹴',
shui => '水谁睡税说娷帨挩捝氺涗涚祱稅脽裞說説誰閖氵',
shun => '顺吮瞬舜俊巛巡廵恂楯橓眴瞚瞤蕣輴順鬊',
shuo => '说数硕烁朔搠妁槊蒴铄哾嗍嗽欶汋洬溯濯燿爍獡療矟碩箾药萷藥說説銏鎙鑠',
shw => '折',
si => '四死丝撕似私嘶思寺司斯食伺厕肆饲嗣巳耜驷兕蛳厮汜锶泗笥咝鸶姒厶缌祀澌俟亖以佀佁価俬偲傂儩凘厠台噝娰媤孠廝徙恖愢杫析枱柶梩楒榹泀泤洍涘瀃燍牭磃祠禗禠禩竢簛糸糹絲緦罒罳肂肄菥蕬蕼虒蜤螄螔蟖蟴覗謕貄逘釲鈶鈻鉰銉銯鋖鍶鐁雉颸飔飤飴飼饴駟騃騦鷉鷥麗鼶灬',
so => '螦',
sol => '乺',
song => '送松耸宋颂诵怂讼竦菘淞悚嵩凇崧忪倯傱吅娀嵷庺愯慫憁憽捒捴揔摗枀枩柗梥棇楤檧漎濍硹聳蓯蘴蜙訟誦鍶鎹锶頌餸駷鬆',
sou => '艘搜擞嗽嗾嗖飕叟薮锼馊瞍溲螋傁凁叜廀廋捒捜摗撨擻敕族棷櫢欶涑潚獀瘶籔蒐蓃藪謏鄋醙鎪鏉颼颾餿騪',
su => '素速诉塑宿俗苏肃粟酥缩溯僳愫簌觫稣夙嗉谡蔌涑傃僁卹嗖囌圱圲埣塐嫊愬憟捽搬摵梀棴榡樎樕橚櫯殐泝洬溸潚潥玊珟璛甦碿稡稤穌窣粛縤縮肅膆莤藗蘇蘓訴謖趚蹜遡遬鋉餗驌骕鯂鱐鷫鹔',
suan => '酸算蒜狻匴撰痠祘笇筭篹选選',
sui => '岁随碎虽穗遂尿隋髓绥隧祟眭谇濉邃燧荽睢亗倠哸嗺埣夊娞嬘嵗挼旞檖歲歳毸浽滖澻瀡煫熣璲瓍睟砕禭穂穟簑粋粹綏縗繀繐繸缞脺膸芕荾莎葰蓑襚誶譢賥遀遗遺鏸鐆鐩陏隊隨雖靃鞖韢髄',
sun => '孙损笋榫荪飧狲隼喰孫巺扻損搎摌树槂潠猻畃筍箰簨蓀蕵薞跣鎨飱餐鶽',
suo => '所缩锁琐索梭蓑莎唆挲睃嗍唢桫嗦娑羧些傞嗩嫅岁嵗惢抄挱摍暛歲沙溑溹牺犧獻琑瑣璅簑簔縒縮莏葰蜶衰褨趖逡逤鎈鎍鎖鎻鏁霍靃髿魦鮻',
ta => '他她它踏塔塌拓獭挞蹋溻趿鳎沓榻漯遢铊闼嗒侤傝呾咜嚃嚺墖太崉搨搭撘撻榙毾涾湿溚澾濌濕牠狧獺祂禢荅褟誻譶蹹躢达迏迖逹達遝鉈錔鎉鎑闒闟闥阘鞈鞑鞜鞳韃鮙鰨',
tae => '垈襨',
tai => '太抬台态胎苔泰酞汰炱肽跆呔鲐钛薹邰骀儓冭咍囼坮大夳奤嬯孡忕忲態擡斄旲枱檯溙漦炲燤珆箈籉粏能臺舦菭詒诒軚釐鈦鈶颱駘鮐',
tan => '谈叹探滩弹碳摊潭贪坛痰毯坦炭瘫谭坍檀袒钽郯镡锬覃澹昙忐但倓傝僋儃啴嗿嘆嘽嘾埮墰墵壇壜婒弾彈怹惔憛憳憻掸撢撣擹攤暺曇榃橝歎沈淡湛湠漢潬灘炎璮痑癉癱禪緂繵罈罎胆舑舔舕荨菼蕁蕈藫裧襢談譚譠貚貪賧赕醈醓醰鉭錟顃餤鷤黮',
tang => '躺趟堂糖汤塘烫倘淌唐搪棠膛螳樘羰醣瑭镗傥饧溏耥帑铴螗伖偒傏儻劏啺嘡坣嵣弹愓戃扩摥擴攩曭榶橖欓湯漟漡煻燙爣矘磄禟篖簜糃糛膅荡蓎蕩薚蘯蝪赯踼蹚逿鄌鎕鎲鏜鐋鐺钂铛镋閶闛闣阊隚鞺餳餹饄鶶黨鼞',
tao => '套掏逃桃讨淘涛滔陶绦萄鼗洮焘啕饕韬叨仐匋咷夲夵姚嫍幍弢慆抭挑搯梼槄檮涭濤燾瑫祹筹籌絛綢綯縚縧绸绹蜪裪討詜謟跳轁迯醄鋾錭鞀鞉鞱韜頫飸饀駣騊',
teng => '疼腾藤誊滕僜儯幐漛痋籐籘縢膯虅螣謄邆霯駦騰驣鰧鼟',
ti => '提替体题踢蹄剃剔梯锑啼涕嚏惕屉醍鹈绨缇倜裼逖荑悌俶偍厗啑嗁嚔奃姼媂媞屜崹嵜弚弟徥徲悐惖惿戻折挮掦揥擿是桋棣楴歒殢洟渧漽狄珶瑅瓋睇碮磃禵稊穉籊綈緹罤肆苐蕛薙虒蝭蟬衹褅褆詆諦謕诋谛趧趯跃踶蹏躍躰軆达迏迖逷遆適銻錫鍗鐟锡題騠骵體髢髰鬀鬄鮧鮷鯷鳀鴺鵜鶗鶙鷈鷉鷤扌',
tian => '天田添填甜舔恬腆佃掭钿阗忝殄畋倎兲典吞呑唺嗔塡娗婖寘屇悿捵搷晪栝沺沾淟湉滇琠瑱璳甛甸町畇畑畠痶盷睓睼瞋碵磌窴紾緂胋舑舚苫菾蚕蚺覥觍賟酟鈿銛錪鍩鎭鎮铦锘镇闐靔靝靦顚顛颠餂鴫鷆鷏黇',
tiao => '条跳挑调迢眺龆笤祧蜩髫佻窕鲦苕粜儵咷啁姚嬥宨岧岹庣恌斢旫晀朓朷桃條樤祒稠窱糶絩聎脁脩艞芀萔蓚蓧蓨螩覜誂調超趒趠踔銚鋚鎥铫鞗頫鯈鰷齠',
tie => '铁贴帖萜餮僣占呫怗惵聑蛈蝶貼跕鉄鉆銕鋨鐡鐵锇飻驖鴩',
ting => '听停挺厅亭艇庭廷烃汀町莛铤葶婷蜓梃霆侱侹厛圢奠奵娗嵉庁庍廰廳忊桯楟榳涏渟濎烴烶珵珽筳綎耓聤聴聼聽脡艼蝏誔諪邒鋌閮鞓頲颋鼮',
tol => '乭',
ton => '獤',
tong => '同通痛铜桶筒捅统童彤桐瞳恫侗酮潼茼仝砼峒恸佟嗵垌偅僮劏勭哃囲峂峝庝恿慟憅晍曈朣樋橦氃洞浵湩炵烔熥燑爞犝狪獞痌眮硐硧秱穜筩粡絧統綂膧艟蓪蚒蜼蟲衕詷赨重鉖鉵銅餇鮦鲖冂',
tou => '头偷透投钭骰亠偸埱妵婾媮愉敨斢殕紏綉緰绣蘣褕諭諳谕谙逗鋀鍮頭飳黈',
tu => '土图兔涂吐秃突徒凸途屠酴荼钍菟堍余兎凃唋啚図圖圗圡堗塗墿宊峹嵞嶀庩廜怢悇捈捸揬摕斁杜梌檡汢涋湥潳瑹痜瘏禿稌筡腞腯莵葖蒤趃跌跿迌釷鈯鋀鋵鍎馟駼鵌鵚鵵鶟鷋鷵鼵',
tuan => '团湍疃抟彖剬剸団圕團塼墥嫥專慱摶敦槫檲湪漙煓猯畽磚稅税篿糰蓴褍褖貒鏄鱄鶉鷒鷻鹑',
tui => '腿推退褪颓蜕煺忒侻俀僓啍墤娧尵弚弟怢橔稅税穨聉脫脮脱蓷藬蘈蛻謉讉蹆蹪追隤頹頺頽饋馈駾騩骽魋',
tun => '吞屯褪臀囤氽饨豚暾吨吴呑啍噋坉庉忳憞旽朜汭沌涒炖焞燉畽窀純纯肫膯臋芚蜳豘軘逐錪霕飩魨鲀黗',
tuo => '拖脱托妥驮拓驼椭唾鸵陀魄橐柝跎乇坨佗庹酡柁鼍沱箨砣他仛侂侻咃啴嘽堶媠嫷它岮彵惰扡拕挩捝撱杔杝棁楕槖橢毤毻汑池沰涶牠狏砤碢磚稅税籜紽脫舃舄莌萚蘀蛇蟺袉袘袥訑託詑說説讬说跅踻軃迆迤迱鉈鋖铊阤陁隋飥饦馱馲駄駝駞騨驒驝魠鮀鰖鱓鴕鵎鼉鼧舵',
uu => '屗徚斏曢朑桛歚毜毝毮洜烪焑焽燞癷皼祍稥耂聁聣艈茒蒊蓞藔虲蝊袰贘躼辪鍂鎼鐢闧霻鶑',
wa => '挖瓦蛙哇娃洼凹袜佤娲腽劸咓唲啘嗗嗢姽媧屲帓徍搲攨汙汚污溛漥瓲畖砙穵窊窐窪聉膃襪譁邷靺鞋韈韎韤鮭鲑黳鼃',
wai => '外歪崴呙咼喎夭瀤竵顡',
wan => '完万晚碗玩弯挽湾丸腕宛婉烷顽豌惋娩皖蔓莞脘蜿绾芄琬纨剜畹菀乛倇免关刓卍卐唍园埦塆壪夗夘妧婠孯岏帵彎忨惌抏捖捥掔晩晼朊杤梚椀槾汍涴潫澫灣琓盌睕笂箢紈絻綄綩綰翫脕苋莧莬萖萬薍蚖貦貫贃贎贯踠輐輓邜鄤鋄鋔鋺錽鍐鎫関闗關頑骩骪骫魭',
wang => '望忘王往网亡枉旺汪妄芒辋魍惘罔亾仼兦匡尢尣尩尪尫彺徃徍忹抂暀朚朢棢瀇焹琞皇盳網莣菵蚟蛧蝄誷輞迋迬',
wei => '为位未围喂胃微味尾伪威伟卫危违委魏唯维畏惟韦巍蔚谓尉潍纬慰桅萎苇渭遗葳帏艉鲔娓逶闱隈沩玮涠帷崴隗诿洧偎猥猬嵬軎韪炜煨圩薇痿亹倭偉偽僞儰厃叞哙唩喡喴噲囗圍堤墛壝媁媙媦寪岿峗峞崣嵔嶶巋幃廆徫恑愄愇懀捤捼揋揻撝撱斖暐有机梶椲椳楲欈沇洈浘渨湋溈溦潙潿濊濰濻瀢為烓煀煒煟熨熭燰爲犚犩猗猚琟瑋璏瓗痏癐癓眭瞶硊硙碨磈磑立維緭緯縅罻腲芛芟苿茟荱荽菋萏葦葨蒍蓶蔿薳藯蘶蜲蜹蜼蝛蝟螱衛衞褽覣覹觹觽觿詴諉謂讆讏趡踒踓躗躛轊違遺鄬醀錗鍏鍡鏏闈阢隇隹霨霺韋韑韙韡頠颹餧餵饖骩骪骫鮇鮠鮪鰃鰄鰖鳂鳚',
wen => '问文闻稳温吻蚊纹瘟紊汶阌刎雯璺免呅呚呡問塭妏娩彣忞忟愠慍抆揾搵昧昷桽榅榲歾殁殟渂溫炆煴珳瑥瘒眼砇穏穩笏紋絻緼縕缊聞肳脕脗芠莬蕰蕴薀藴蘊蚉螡蟁褞豱輼轀辒鈫鎾閺閿闅闦限韞韫顐饂馼魰鰛鰮鳁鳼鴍鴖鼤亠',
weng => '翁嗡瓮蕹蓊勜塕壅奣嵡暡滃甕瞈罋聬蒙螉鎓鶲鹟齆',
wie => '膸',
wo => '我握窝卧挝沃蜗涡斡倭幄龌肟莴喔渥硪仴偓唩嗌噁嚄埚堝夭婐婑媉媪媼捰捼捾撾擭杌枂楃涴涹渦濄濣焥猧瓁瘟瞃矆窩腛臒臥艧萵蒦薶蝸踒踠雘馧齷龏',
wu => '无五屋物舞雾误捂污悟勿钨武戊务呜伍吴午吾侮乌毋恶诬芜巫晤梧坞妩蜈牾寤兀怃阢邬忤骛於鋈仵杌鹜婺迕痦芴焐庑鹉鼯浯圬乄亡亾仡伆侉俉倵儛兦剭務吳呉啎喔嗚噁垭埡堥塢墲奦娒娪娬嫵屼岉峿嵍嵨幠廡弙御忢悞悮惡憮扜扝扤揾摀敄旄旿杅杇柮橆歍母汙汚沕洖洿渞渥溩潕烏無熃熓玝珷珸瑦璑甒瞀瞴矹碔祦禑窏窹笏箼粅膴茣莁莫蕪蘁螐蟱誈誣誤譕趶躌逜郚鄔釫鋘鋙錻鎢铻陚隖雺霚霧霿靰騖鯃鰞鴮鵐鵡鶩鷡鹀鼿齀齬龉唔蝥',
xi => '西洗细吸戏系喜席稀溪熄锡膝息袭惜习嘻夕悉矽熙希檄牺晰昔媳硒铣烯腊析隙栖汐犀蜥奚浠葸饩屣玺嬉禊兮翕穸禧僖淅蓰舾蹊醯欷皙蟋羲茜徙隰唏曦螅歙樨阋粞熹觋菥鼷裼舄义係俙傒凞匸卌卥卻厀吚呬呰咥咦咭唽噏嚊嚱塈壐奊娭媐嬆宩屃屎屖屭嵠嶍嶲巂巇廗徆徯忔忚忥怬怸恄悕惁愾慀憘憙戯戱戲扱扸摡撕擊既晞晳暿杫枲桸棲椞椺榽槢橀橲欪欯歖氣氥洒渓湿滊漇漝潝潟澙濕灑焁焈焟焬煕熂熈熺熻燍燨爔犔犠犧狶猎獡獻琋璽瓕瘜盻睎瞦矖碏磶礂稧窸糦細綌緆縘縰繥繫纚绤羛義習翖肸肹胁脅脇脋舃莃莔葈蒠蒵蓆蔇蕮薂虩蜤蜴蝷螇蟢蠵衋褶襲覀覡覤觹觽觿訢詑誒諰謑謚謵譆诶谥谿豀豨豯貕赥赩趇趘蹝躧遟郄郋郤鄎酅釐釳釸鈒鈢鉨鉩銑錫錯鎴鏭鑴钑错闟隟隵雟雭霫霼飁餏餙餼饻騱騽驨鬩鯑鰓鰼鱚鳃鳛鵗鸂黖鼰鼳郗',
xia => '下吓夏峡虾瞎霞狭匣侠辖厦暇唬狎柙呷黠硖罅遐瑕丅俠假傄叚呀哧嗄嗑嚇圷埉夓夾岈峽廈徦懗押捾搳敮昰梺欱歃毳浃浹溊炠烚煆狹珨疜疨瘕睱硤碬磍祫笚筪給縀縖给翈舝舺芐葭蕸蝦螛諕謑谺赮轄郃鍜鎋鏬閕閜陜陿颬騢魻鰕鶷',
xian => '先线县现显掀闲献嫌陷险鲜弦衔馅限咸锨仙腺贤纤宪舷涎羡铣见苋藓岘痫莶籼娴蚬猃祆冼燹跣跹酰暹氙鹇筅霰仚伣伭佡俔僊僩僲僴咁咞哯唌啣嗛嘕垷埳堿壏奾妗妶姍姗姭姺娊娨娹婱嫺嫻嬐孅寰尟尠屳峴崄嶮幰廯忺慊慳憪憲憸懢挦捍探揱搚搟撊撏攇攕晛杴枮梘槏橌櫶欦毨洒洗涀湺溓澖濂瀗灑灦烍狝獫獮獻玁玹珗現甉癇癎盷省県睍瞯矣硍碱礆礥禒禰秈稴笕筧箲粯糮絃絤綅綖綫線縣縿繊纎纖缐羨羬肩胁胘脅脇脋膁臔臤臽苮莧蔹薟藖蘚蘝蘞蚿蛝蜆衘褼襳見誢誸諴譀譣豏賢贒赻蹮躚軐軒輱轩醎醶釤銑銛銜鋧錎錟鍁鍌鏾鑦钐铦锬閑閒闞阚陥険險韅韯韱顈顕顯餡饀馦鮮鰔鱻鶱鷳鷴鷼鹹麙麲黹鼸',
xiang => '想向象项响香乡相像箱巷享镶厢降翔祥橡详湘襄飨鲞骧蟓庠芗饷缃葙亨亯佭傢儴勨勷啌啍嚮姠嶑廂忀攘晑曏栙楿欀洋潒珦瓖瓨絴緗纕缿羏膷舡萫薌蘘蚃蠁衖襐詳跭迒郷鄉鄊鄕銄銗鋞鐌鑲閧闀闂響項餉饗饟驤鬨鮝鯗鱌鱜鱶鴹麘',
xiao => '小笑消削销萧效宵晓肖孝硝淆啸霄哮嚣校魈蛸骁枵哓崤筱潇逍枭绡箫佼侾俏俲傚効叜叟号呺呼咲咻哨唠唬啋嗃嘋嘐嘨嘮嘯嘵嚻囂姣婋宯庨彇恔恷憢挠捎揱搜撓撨敩斅斆暁曉梟梢橚櫹歊歒歗殽毊洨涍滧漻潚澩瀟灱灲烋焇熇熽燆燺爻狡猇獟獢痚痟皛皢睄硣穘窙笹筿箾篠簘簫絞綃縿绞翛胶脩膮芍茭莦萷蕭薂藃虈虓蟂蟏蟰蠨訤詨誟誵謏謞謼譊踃較轇较郩銷颵騷驍驕骄骚骹髇髐鴞鴵鵁鷍鷕鸮',
xie => '写些鞋歇斜血谢卸挟屑蟹泻懈泄楔邪协械谐蝎携胁解契叶绁颉缬獬榭廨撷偕瀣渫亵榍邂薤躞燮勰伳偞偰僁儶冩劦協卨吤唏喈嗋噧垥塮夑夾奊娎媟孈寫屓屜屟屧屭峫嶰徢恊愶慀拹挾接揳搚摺擕擷攜旪暬枻桔榝槷欸歙殺汁洩湝溉滊潰澥瀉灺炧炨烲焎熁燲爕猲瑎眭碿祄禼糏紲絏絜絬綊緤緳繲纈缷翓耶脅脇脋膎薢藛蝑蝢蠍蠏衺裌褉褻襭觟觧諜諧謝譮讗谍豫跬躠迦鍱鐷隰鞢鞵韰頁頡页骱鬹魼鮭鲑齂齘齛齥龤溃',
xin => '新心欣信芯薪锌辛寻衅忻歆囟莘镡馨鑫昕伈伩俽兴噷噺妡姰嬜孞尋庍廞惞愖憖撢杺枔橝欵款歀潃炘焮盺礥脪興舋襑訢訫軐邤釁鈊鋅鐔阠顖馫馸鬵',
xing => '性行型形星醒姓腥刑杏兴幸邢猩惺省硎悻荥陉擤荇侀倖哘坓坙垶塂娙婞嫈嬹巠曐洐涬滎煋熒狌瑆皨睲研硏箵篂緈胜臖興莕蛵裄觪觲謃郉鈃鉶銒鋞钘铏陘餳饧騂骍鮏鯹',
xiong => '胸雄凶兄熊汹匈芎兇哅夐宪忷恟敻昫洶焸胷訩詗詾讻诇賯赨',
xiu => '修锈绣休羞宿嗅袖秀朽臭溴貅馐髹鸺咻庥岫俢嚊樇櫹滫烋烌煦珛琇璓糔綇綉繍繡脙脩臰臹苬茠莠蓨螑裦褎褏銝銹鎀鏅鏥鏽飍饈髤鮴鱃鵂齅',
xu => '许须需虚嘘蓄续序叙畜絮婿戌徐旭绪吁酗恤墟糈勖栩浒蓿顼圩洫胥醑诩溆煦盱砉于亐伃休伵余侐俆偦冔勗卹呕呴呼咻喣嗅嘔嘼噓垿壻妶姁姐媭嬃幁怴怵恓惐慉掝揟敍敘旮旴昫晇暊朂朐楈槒欨欰欻歔歘殈汿沀淢湑滀滸漵潊烅烼獝珝珬疞盢盨眗瞁瞲矞稰稸窢籲続緒緖緰縃繻續聟肷胊芋芌芧蒣蓲蕦藇藚虗虛蚼蛡蝑規规訏許訹詡諝諿謣謳譃讴谞賉邪鄦鉥銊鑐雩須頊馘驉鬚魆魖魣鱮',
xuan => '选悬旋玄宣喧轩绚眩癣券暄楦儇渲漩泫铉璇煊碹镟炫揎萱痃谖亘吅咺喛塇夐妶姰媗嫙嬛弲怰愃愋懁懸揈撰擐昍昡晅暅暖暶梋楥檈洵涓澴烜煖狟獧玆玹琁琄瑄璿瓊癬盤眴睻矎禤箮絃絢絹縣縼繏绢翧翾萲蓒蔙蕿藼蘐蜁蜎蝖蠉衒袨諠諼譞讂贙軒轋選還鉉鋗鍹鏇鐶镮鞙颴饌馔駨駽鰚',
xue => '学雪血靴穴削薛踅噱鳕泶乴决勪吷哮嚯坹壆學岤峃嶨怴斈桖梋樰決泧泬滈澩瀥炔烕燢狘疦疶瞲膤艝茓蒆袕觷謔谑趐轌辥雤鞾韡鱈鷽鸴',
xun => '寻讯熏训循殉旬巡迅驯汛逊勋荤询浚巽鲟浔埙恂獯醺洵郇峋蕈薰荀窨曛徇伨侚偱勛勲勳卂咰噀噚嚑坃塤壎壦奞姰孙孫尋廵悛愻揗撏攳杊栒桪梭樳殾毥洒潭潯濬灥焄煇燂燅燖燻爋爓狥狻珣璕眴矄稄筍筼篔紃絢纁绚臐荨葷蔒蕁薫蘍蟫蟳襑訊訓訙詢賐迿逡遁遜鄩鑂鑫顨馴駨鱏鱘鶽彐',
ya => '呀压牙押芽鸭轧哑亚涯丫雅衙鸦讶蚜垭疋砑琊桠睚娅痖岈氩伢迓揠乛亜亞俹倻劜厊厌厓厭吖吾呾唖啞圔圠圧埡堊堐壓姶婭孲崕庌庘御拁挜掗札枒椏椻歇氬浥漄潝烏犽猚猰玡瑘疨瘂碣磍稏穵窫笌聐蕥襾訝軋輅輵辂邪釾錏鐚铔閘闸顔颜鴉鴨鵪鵶鶕鹌鼼齖齾崖',
yan => '眼烟沿盐言演严咽淹炎掩厌宴岩研延堰验艳殷阉砚雁唁彦焰蜒衍谚燕颜阎铅焉奄芫厣阏菸魇琰滟焱赝筵腌兖剡餍恹罨檐湮偃谳胭晏闫俨郾酽鄢妍鼹崦阽嫣乵但俺偐偣傿儼兗円剦匽厂厃厭厳厴唌喦喭噞嚥嚴囐埏埯塩墕壛壧夏夵妟姲姸娫娮媕嬊嬐嬮嬿孍屵崄嵃嵒嵓嶖嶮巌巖巗巘巚巡广庵廵弇彥愝懕戭扊抁挩挻捝掞揅揜揞敥昖晻暥曕曮棪椻椼楌樮橪檿櫩欕殗氤沇洇洝涎淊淡淫渰渷湺溎漹灎灔灧灩炏烻焔煙熖燄爓牪狠狿猒珚琂瓛甗硏硯硽碞礹篶簷綖縯羡羨膁臙艶艷莚莶菴萒葊葕蔅蔫薟虤蝘裺褗覃覎觃觾訁訮詽諺讌讞讠豓豔豜豣贋贗趼躽軅这這遃郔酀酓醃醶醼釅鉛錟锬閆閹閻閼阭险陰隁隒險靥靨顏顑顔顩饜騐験騴驗驠鬳魘鰋鳫鳱鴈鴳鶠鷃鷰鹽麙麣麲黡黤黫黬黭黰黶鼴齗齞齴龂龑',
yang => '样养羊洋仰扬秧氧痒杨漾阳殃央鸯佯疡炀恙徉鞅泱蛘烊怏佒傟劷勜卬咉坱垟奍姎婸將岟崵崸慃懩抰揚攁敭旸昂昜映暘柍楊楧様樣歍氜氱湯潒瀁炴煬珜瑒瘍癢眏眻礢禓紻羏羕羘羪胦英詇詳諹详軮輰鉠鍈鍚鐊钖阦陽雵霙霷颺飏飬養駚鰑鴦鴹鸉',
yao => '要摇药咬腰窑舀邀妖谣遥姚瑶耀尧钥侥陶约疟珧夭鳐鹞轺爻吆铫幺崾肴曜徭杳窈么乐仸倄偠傜僥匋啮喓嗂噛嚙垚堯娆婹媱嬈宎尭岆峣嶢嶤幼徺怮恌愮抭揺搖摿撽暚曣枖柼楆榚榣樂殀殽洮淫溔滛瀹烄烑熎燿狕猶猺獟玅瑤由眑矅磘祅穾窅窔窯窰筄箹約繇纅艞苭荛葯葽蓔蕘薬藥蘨袎覞訞詏謠謡讑趯踰軺遙銚鎐鑰闄隃靿顤颻飖餆餚騕驁骜鰩鴁鴢鷂鷕鼼齩',
ye => '也夜业野叶爷页液掖腋冶噎耶咽曳椰邪谒邺晔烨揶铘靥亪亱倻偞僷吔啘喝嘢嚈埜堨墅墷壄射峫嶪嶫懕抴拽捓捙揞揲擖擛擨擪擫斜暍曄曅曗枒枼枽楪業歋殕殗洂洇涂漜潱澲煠熀燁爗爺瓛痷皣瞱瞸礏窫緤聂聶荼葉虵蠮蠱謁鄓鄴釶釾鋣鍱鎁鎑鐷靨頁餘餣饁饐馀馌驜鵺鸈黦',
yi => '一以已亿衣移依易医乙仪亦椅益倚姨翼译伊蛇遗食艾胰疑沂宜异彝壹蚁谊揖铱矣翌艺抑绎邑蛾屹尾役臆逸肄疫颐裔意毅忆义夷溢诣议怿痍镒癔怡驿旖熠酏翊欹峄圯殪嗌咦懿噫劓诒饴漪佚咿瘗猗眙羿弈苡荑仡佾贻钇缢迤刈悒黟翳弋奕蜴埸挹嶷薏呓轶镱舣丿乁乂也亄伇伿佁佗侇俋偯儀億儗兿冝劮勚勩匇匜印叆叕台叹吚听呭呹唈噎囈圛圪坄坨垼埶墿壱夁夕失奇妷姬媐嫕嫛嬄嬑嬟孴它宐宧寱寲射峓崎崺嶧嶬巳巸帟帠幆庡廙弌弬彛彜彞彵忔怈怠恞悘悥憶懌戺扅扆扡择拸掎掜搋搤撎擇攺敡敼斁施旑昳晹暆曀曎曵杙杝枍枻柂栘栧栺桋棭椬椸榏槷槸樴檍檥檹櫂欥欭歖歝殔殹毉汽沶治泄泆洢洩洫浂浥浳渫湙潩澤澺瀷炈焉焬焱焲熈熙熤熪熼燚燡燱犄狋狏獈玴珆瑿瓵畩異疙痬瘞瘱睪瞖硪礒礙祎禕秇稦穓竩笖箷簃籎紲絏維綺縊繄繶繹绁绮维羛羠羡羨義耛耴肊膉艗艤芅苅苢萓萟蓺藙藝蘙虉蛜蛡蛦螔螘螠蟻衤衪衵袂袆袘袣裛裿褘褹襗襼觺訑訲訳詍詑詒詣誃誒誼謚謻譩譯議譺讉讛诶谥豙豛豷貖貤貽賹贀跇跠踦軼輗輢轙辥辷迆迭迱迻逘遺郼醫醳醷释釋釔釴釶鈘鈠鉇鉈鉯銕銥錡鎰鏔鐿钀铊锜阣阤陁陭隶隿雉霅霬靉靾頉頤頥顊顗飴饐駅驛骮鮧鮨鯣鳦鴺鶂鶃鶍鷁鷊鷖鷧鷾鸃鹝鹢鹥黓黝黳齮齸',
yin => '因引印银音饮阴隐荫吟尹寅茵淫殷姻烟堙鄞喑夤胤龈吲圻狺垠霪蚓氤铟窨瘾洇茚乑乚伒众侌傿冘凐听唫噖噾嚚囙圁垔垦垽堷壹婣婬峾崟崯嶾币廕愔慇慭憖憗懚斦朄栶梀檃檭檼櫽欭欽歅殥沂泿洕浔淾湚溵滛潭潯濥濦烎犾猌玪珢璌瘖癊癮硍碒磤禋秵筃粌絪緸縯芩苂荶蒑蔩蔭蘟螾蟫裀言訔訚訡訢誾諲讔赺趛輑酓酳釿鈏鈝銀銦闇闉阥陰陻隂隠隱霒霠靷鞇韾飮飲駰骃鮣鷣齗齦龂',
ying => '应硬影营迎映蝇赢鹰英颖莹盈婴樱缨荧萤萦楹蓥瘿茔鹦媵莺璎郢嘤撄瑛滢潆嬴罂瀛膺荥颍俓偀僌哽啨営噟嚶塋夃央媖嫈嬰孆孾嵤巆巊廮応愥應摬攍攖攚旲景暎朠柍桜桯梬櫻櫿泂浧渶溁溋滎潁濙濚濴瀅瀠瀯瀴灐灜焸煐熒營珱瑩瓔甇甖甸癭盁眏矨碤礯穎籝籯緓縄縈繩纓绬绳罃罌耺膡莖萾藀蘡蛍蝧蝿螢蠅蠳褮覮謍譍譻賏贏軈逞鎣鐛鑍锳霙鞕韹韺頴颕鱦鴬鶧鶯鷪鷹鸎鸚',
yo => '哟育唷喲嚛',
yong => '用涌永拥蛹勇雍咏泳佣踊痈庸臃恿壅慵俑墉鳙邕喁甬饔镛傛傭勈嗈噰埇塎嫞容嵱廱彮怺悀惥愑愹慂揘擁柡栐槦湧滽澭灉牅癕癰砽硧禜筩臾苚蒏蕹詠踴遇郺鄘醟銿鏞雝顒颙鯒鰫鱅鲬鷛',
you => '有又由右油游幼优友铀忧尤犹诱悠邮酉佑釉幽疣攸蚰莠鱿卣黝莸猷蚴宥牖囿柚蝣莜鼬铕蝤繇呦侑丣亴偤優冘叹哊唀嚘坳奥妋姷孧尢尣峟峳庮怞怣怮憂懮戭扰揂揄斿栯梄梎楢槱櫌櫾汓汼沋泅泈泑浟湵滺瀀牗牰狖猶獶甴痏祐禉秞糿纋羐羑羗耰聈聱肬脜脩苃莤蒏蕕蚘蜏褎褏訧誘貁輏輶迶逌逰遊邎郵鄾酭鈾銪銹锈駀魷鮋鲉麀',
yu => '与于欲鱼雨余遇语愈狱玉渔予誉育愚羽虞娱淤舆屿禹宇迂俞逾域芋郁谷吁盂喻峪御愉粥渝尉榆隅浴寓裕预豫驭蔚妪嵛雩馀阈窬鹆妤揄窳觎臾舁龉蓣煜钰谀纡於竽瑜禺聿欤俣伛圄鹬庾昱萸瘐谕鬻圉瘀熨饫毓燠腴狳菀蜮蝓丂亏亐伃俁俼偊傴僪儥兪匬叞吳吾唷唹喁喅喐喩噊噢噳圫堉堣堬墺夕奥娛娪娯婾媀媮嫗嬩宛寙峿崛崳嵎嶎嶼庽彧忬悆悇惌惐慾懊懙或戫扜扵拗挧捓敔斔斞旟昙杅栩栯桙梧棛棜棫楀楡楰櫲欎欝歈歟歶汙汚污汩淢淯湡滪漁澚澞澦澳灪灹焴煨燏燰爩牏獄獝王玗玙琙琟瑀璵畬畭痏瘉癒盓睮矞砡硢礇礖礜祤禦秗稢稶穥穻箊篽籅籞籲紆緎繘罭羭翑腧與舒艅芌苑茟茰荢菸萭萮蒮蓹蕍蕷薁藇蘌蘛虶蜍蜟蝺螸蟈衘衙衧袬褕覦語諛諭謣譽貍貐貗踰軉輍輿轝迃逳遹邘郚鄅酑醧釪鈺銉鋊鋙錥鍝鐍鐭铻閼閾阏陓隃隩雓霱預頨顒颙飫餘饇馭騟驈骬髃鬰鬱魊魚魣鮽鯲鰅鱊鱮鳿鴥鴧鴪鵒鷠鷸鸆鸒麌齬齵肀',
yuan => '远员元院圆原愿园援猿怨冤源缘袁渊苑垣鸳辕圜鼋橼媛爰眢鸢掾芫沅瑗螈箢塬垸傆允剈厡厵咽員喛噮囦圎園圓夗妧妴媴嫄嫚嬽宛寃弲悁惌捐杬棩楥榞榬櫞涓涴淵渁渆渕湲溒灁焆猨獂盶禐穿笎緣縁羱肙葾蒝蒬薗薳蚖蜎蜵蝝蝯衏裫裷褑褤謜貟贠輐轅逺遠邍邧酛鈨鋺鎱阮陨隕願駌騵魭鳶鴛鵷鶢鶰鹓黿鼘鼝',
yue => '月越约跃阅乐岳悦曰说粤钥瀹钺刖龠栎樾哕哾噦囝块妁妜嬳岄嶽彟彠恱悅戉扚抈捳擽曱枂櫟汋烁焆爍爚玥矆矱礿禴箹篗籆籥籰粵約臒药蘥蚎蚏蛻蜕蠖說説趯跀跞躍躒軏鈅鉞銳鋭鑠铄锐閱閲髺鸑鸙黦龥',
yun => '云运晕允匀韵陨孕耘蕴酝郧员氲恽愠郓芸筠韫昀狁殒纭熨伝傊勻叞呍員喗囩均夽奫妘媪媼尉尹怨惲愪慍抎抣暈枟榅樂橒殞氳沄涒涢温溳澐煇煴煾熅熉玧畇瘟盾眃磒秐筍筼篔紜緷緼縕縜繧缊耺腪苑荺菀蒀蒕蒷蕓蕰薀藴蘊蜵蝹褞貟賱贇贠赟輼轀辒運鄆鄖醖醞鈗鋆阭隕雲霣韗韞韻頵餫馧馻齫齳',
za => '杂砸咋匝扎咱咂拶啈啐喒嘁噈囃囋囐帀桚沞沯濽灒磼籴紥紮臜臢襍鉔雑雜雥韴魳',
zad => '曱',
zai => '在再灾载栽宰哉甾崽仔傤儎才扗洅渽溨災烖睵縡菑賳載酨',
zan => '咱暂攒赞簪趱糌瓒拶昝錾偺儧儹兂喒囋寁揝撍攢暫桚涔湔濺濽灒瓉瓚禶穳篸簮臢襸讃讚賛贊趲蹔鄼酂酇鏨鏩鐕鐟饡',
zang => '脏葬赃藏奘臧驵匨塟弉戕牂牫羘臓臟蔵賍賘贓贜銺駔驡髒',
zao => '早造遭糟灶燥枣凿躁藻皂噪澡蚤唣傮唕喿慥栆梍棗槽煰璅璪皁窖竃竈簉繅繰缫缲艁草薻謲譟趮蹧醩鑿',
ze => '则责择泽咋侧箦舴帻迮啧仄昃笮赜伬側則厕厠唶啫嘖夨嫧崱幘庂廁択捑措擇昗柞樍歵汄沢泎溭滜澤灂皟睪瞔矠礋稄稷簀耫萚葃蔶蘀蠌襗諎謫謮讁谪責賾飵鸅齚齰',
zei => '贼蠈賊鯽鰂鱡鲗鲫',
zen => '怎谮僭囎撍譖譛',
zeng => '增赠憎曾综缯罾甑锃増曽橧熷璔矰磳綜縡繒譄贈鄫鋥鬷鱛',
zha => '扎炸渣闸眨榨乍轧诈铡札蜡查栅咋砟痄吒哳楂猹蚱揸喋柞咤齄偞偧冊册剳劄厏哆喥囃奓宱怍扠抯拃挓挿插揷搩搾摣擖柤柵樝渫溠潳灹煠牐甴皶皻笮箑箚紥紮耫膪苲苴蔖蕏藸蚻觰詐諎謯譇譗踷蹅軋迊醡鍘閘霅鞢鮓鮺鰈鲊鲝鲽齇齟齰龃馇喳',
zhai => '摘窄债斋寨择翟宅侧祭砦瘵亝側債厇厏啇嚌夈度抧捚擇擿斎柴榸檡牴疵箦簀粂膪責责鉙駘骀骴齋',
zhan => '站占战盏沾粘毡展栈詹颤蘸湛绽斩辗崭瞻谵搌旃亶佔偡噡嫸嵁嶃嶄嶘嶦怗惉戦戰拃斬旜栴桟棧椾榐橏欃氈氊湔澶琖皽盞碊綻菚薝虥虦蛅袒襢覱詀謙譧譫讝谦趈跕蹍躔輚輾轏邅醆醮閚霑颭飐飦餰饘驏驙骣魙鱣鳣鳽鸇鹯點黵',
zhang => '张章长帐仗丈掌涨账樟杖彰漳胀瘴障仉嫜幛鄣璋嶂獐蟑仧傽墇帳幥弡張慞扙承暲涱漲痮瘬瞕礃粀粻脹蔁賬遧鏱鐣長镸鞝餦騿鱆麞',
zhao => '找着照招罩爪兆朝昭沼肇嘲召赵棹啁钊笊诏佋啅垗妱巶旐晁曌枛桃櫂淖濯炤燳爫狣瑵皽盄瞾窼箌罀羄肁肈菬著蚤詔謿趙釗釽鉊鍣駋鮡鳭鼂鼌',
zhe => '着这者折遮蛰哲蔗锗辙浙柘辄赭摺鹧磔褶蜇谪乇仛厇啠喆嗫嗻嘀嚞囁埑堵嫬庶悊慹扸摂摄攝斥晢晣杔棏樀樜歽淛潪矺砓籷粍耷聂聑聶虴蟄蟅袩褚襵詟謫謶謺讁讋軼輒輙轍轶這適銸鍺陬馲驝鮿鷓鷙鸷著',
zhen => '真阵镇针震枕振斟珍疹诊甄砧臻贞侦缜蓁祯箴轸榛稹赈朕鸩胗浈桢畛圳椹侲偵唇坫塡塦填姫嫃寊屒帪弫慎戡抮挋揕搸敒敶昣朾枮栕栚桭楨榐槇樼殝沴沵湞溱滇潧澵獉珎瑧眕眞眹碪禎禛竧籈紖紾絼縝縥纼聄萙葴蒖薽蜄袗裖覙診誫謓貞賑趁趂軫轃辴迧遉酖酙針鈂鉁鋴錱鍖鍼鎭鎮陣陳靕駗鬒鮝鱵鲞鴆黮黰鼎鼑帧',
zheng => '正整睁争挣征怔证症郑拯丁蒸狰政峥钲铮筝诤徵鲭丞伥佂倀凧埥埩塣姃媜崝崢嶒幀徎徰徴愸憕承抍掙掟揁撜敞晸止氶浧湞炡烝爭猙町癥眐睜瞠箏篜糽綪聇脀証諍證趟踭鄭鉦錚鬇鮏鯖鯹鴊帧',
zhi => '只之直知制指纸支芝枝稚吱蜘质肢脂汁炙织职痔植抵殖执值侄址滞止趾治旨窒志挚掷至致置帜识峙氏智秩帙摭黹桎枳轵忮祉蛭膣觯郅栀彘芷祗咫鸷絷踬胝骘轾痣陟踯雉埴贽卮酯豸跖栉乿亊伎俧倁値偫傂儨凪剬劕劧厔咥嚔坁坧垁埃執墆墌多夛妷姪娡媞嬂实寘實崻巵帋幟庢庤廌徏徔徝徴徵恃恉慹憄懥懫戠扺扻抧拓拞挃捗搘搱摕摨摯擲擳擿斦旘昵晊杝杫柣栺栽梔梽椥楖榰槜樀樲樴櫍櫛歭氐汥汦沚泜洔洷淽滍滯漐潌潪瀄熫犆狾猘瓆瓡畤疐疷疻瘈眰砋礩示祁祇祑祬禃禔禵秇秓秖秪积秲秷稙稺穉筫紙紩絺綕緻縶織翐耆聀職胑胵膱臷臸芖茋茝菭薙藢蘵虒蚔螲蟙衹衼袟袠製襧覟觗觝觶訨誌謢識豑豒貭質贄跱踶蹛蹠蹢躑躓軄軹軽輊迟迣遟遲郦酈釞鉄銍銴鋕鑕铁铚锧阤阯陁隲隻馶馽駤騭騺驇鯯鳩鳷鴙鴲鶨鷙鸠鼅夂',
zhong => '中重种钟肿众终盅忠仲衷踵舯螽锺冢忪乑伀偅刣喠堹塚妐妕媑尰幒彸徸柊歱汷泈潼炂煄狆瘇眾祌種穜童筗籦終緟腫舂茽董蔠蚛蚣蝩螤蟲衆衳衶褈諥蹱迚鈆鈡銿鍾鐘鴤鼨夂',
zhou => '周洲皱粥州轴舟昼骤宙诌肘帚咒繇胄纣荮啁碡绉籀妯酎伷侏侜倜僽冑呪咮啄喌喙噣嚋婤府徟扭掫晝晭柚椆注洀淍炿烐珘甃疛皺盩睭矪祝箒籒籕粙紂紬縐翢胕舳菷葤薵詋詶調諏謅譸诪诹调賙赒軸輈輖辀逐週郮鈾銂铀霌駎駲騆騶驟驺鬻鯞鵃鸼',
zhu => '住主猪竹株煮筑贮铸嘱拄注祝驻属术珠瞩蛛朱柱诸诛逐助烛蛀潴洙伫瘃翥茱苎橥舳杼箸炷侏铢疰渚褚躅麈邾槠竺予佇劅劚劯咮嗻噣囑坾墸壴孎宁宔尌屬嵀庶搊敱斀斗斸曯朝枓柠柷楮樦櫡櫧櫫欘殶泏泞澍濐瀦灟炢煑燭爥眝矚砫硃磩祩秼窋竚笁笜筯築篫篴紵紸絑纻罜羜芧苧茁茿莇蓫蕏薥藷藸蚰蝫蠋蠩蠾袾註詝誅諸豬貯跓跙跦軴迬逗逫鉏鉒銖鋳鑄钃阻除陼霔飳馵駐駯騶驺鮢鯺鱁鴸鸀麆鼄著丶',
zhua => '抓爪挝摣撾檛簻膼髽',
zhuai => '拽转尵捙睉跩顡嘬',
zhuan => '转专砖赚传撰篆颛馔啭沌傳僎僝剸叀囀堟塼嫥孨専專恮抟摶湍漙灷瑑瑼甎磚竱篹篿簨籑縳耑腞膞蒃蟤襈諯譔賺転轉鄟顓饌鱄',
zhuang => '装撞庄壮桩状幢妆僮奘戆丬壯壵妝娤庒憧戅戇梉樁湷漴焋狀獞粧糚艟荘莊裝贑贛赣',
zhui => '追坠缀锥赘椎骓惴缒隹倕垂埀墜娷揣槌沝甀畷硾磓礈笍箠綴縋腏膇致萑諈贅轛醀醊錐錗錣鎚鑆隊隧餟騅鵻',
zhun => '准谆屯肫窀凖啍圫埻宒忳旽淳湻準甽盹稕純綧纯胗衠訰諄迍飩饨黱',
zhuo => '捉桌着啄拙灼浊卓琢缴茁酌擢焯濯诼浞涿倬镯禚斫丵剢劅勺叕啅啜噣圴坧墌妰娺彴捔掇撯擆斀斮斱斲斵晫梲棁棳棹椓槕櫡汋淖準濁灂炪烵犳狵琸矠硺穛穱窡窧箸篧籗籱繳罬聉肫蓔蕞藋蝃蠗蠿諁諑謶趠趵踔蹠躅鉵鋜鐯鐲鵫鷟杓著',
zi => '字自子紫籽资姿吱滓仔兹咨孜渍滋淄笫粢龇秭恣谘趑缁梓鲻锱孳耔觜髭赀茈訾嵫眦姊辎事倳剚吇呰呲啙嗞姉姕孖孶崰杍栥椔榟橴次沝泚洓湽漬澬牸玆璾甾疵眥矷禌秄秶稵穧紎緇胏胔胾芓茊茡茲菑葘蓻薋虸訿諮貲資赼趦跐載輜輺载鄑釨鈭鋅錙鍿鎡锌镃頾頿鯔鰦鶅鼒齊齍齐齜',
zo => '咗唨',
zong => '总纵宗棕综踪鬃偬粽枞腙倊倧傯堫嵏嵕嵸從惣惾愡捴揔搃摠昮朡椶樅潀潈潨熜熧燪猔猣疭瘲碂磫稯糉綜緃総緫緵縂縦縱總翪艐葼蓗蓯蝬豵踨蹤錝鍯鏓鑁騌騣骔鬉鬷鯮鯼',
zou => '走揍奏邹鲰鄹陬驺诹偢媰掫搊族棷棸楱箃緅芻菆諏赱郰鄒騶鯐鯫黀齱齺辶',
zu => '组族足阻租祖诅菹镞卒俎伜伹倅傶卆哫啐嘁岨崒崪徂怚柤沮淬爼珇砠稡箤紣組綷苴葅蒩詛謯趱趲踤踿蹴鉃鉏鉐錊鎐鎺鏃鑿靻顇駔驵',
zuan => '钻纂赚缵躜攥劗揝撮攒攢欑篹籫繤纉纘賺躦鑚鑽',
zui => '最嘴醉罪堆咀觜蕞厜嗺噿嫢嶉嶊嶵摧撮晬朘枠栬槯樶檇檌欈濢璻睟祽稡穝絊纗羧脧蟕辠酔酨酻鋷錊雋',
zun => '尊遵鳟撙樽僎僔噂墫奠嶟拵捘捽栫瀳繜罇袸譐跧踆蹲銌鐏鱒鶎鷷',
zuo => '做作坐左座昨凿琢撮佐笮酢唑祚胙怍阼柞乍侳咗岝岞挫捽柮椊砟秨稓筰糳繓苲莋葃葄蓙袏諎醋鈼鑿飵嘬阝'
April 10

常用日语发音

中文意思: 早上好!
汉语拼音发音:ou ha you

中文意思: 晚上好!
汉语拼音发音:kong ba wa

中文意思: 晚安
汉语拼音发音:ou ya si ni

中文意思: 你好吗?
汉语拼音发音:kong ni ji wa

中文意思: 我回来了!
汉语拼音发音:ta da yi ma

中文意思: 等一下!
汉语拼音发音:ma dai

中文意思: 老头子!
汉语拼音发音:ou ji sang

中文意思: 父亲
汉语拼音发音:(ou) dao sang

中文意思: 儿子
汉语拼音发音:mu si gao

中文意思: 真的!?
汉语拼音发音:hong dou ni

中文意思: 我明白了!
汉语拼音发音:wa ka da wa

中文意思: 对不起!
汉语拼音发音:gu min na sa yi

中文意思: 没关系!?不要紧!?
汉语拼音发音:dai zou bu

中文意思: 可爱、可爱的。
汉语拼音发音:ka wa yi

中文意思: 可怕
汉语拼音发音:ku wa yi

中文意思: 太好了!
汉语拼音发音:you ka da

中文意思: 怎么?干什么!
汉语拼音发音:na ni

中文意思: 多多关照!
汉语拼音发音:you lou xi gu

中文意思: 但是!
汉语拼音发音:dai mou

中文意思: 大家!
汉语拼音发音:min na

中文意思: 住手,不要呀!
汉语拼音发音:ya mei lu

中文意思: 怎么样?如何?
汉语拼音发音:dou da

中文意思:好过分!
汉语拼音发音:ji dou yi nou

中文意思: 喜欢吗?
汉语拼音发音:si gi nan da

中文意思: 可恶!
汉语拼音发音:ke sou

中文意思: 怎么办?
汉语拼音发音:tou xi you

中文意思: 小心点
汉语拼音发音:you zi gei dei

中文意思: 解剖
汉语拼音发音:kai pou

中文意思: 加油
汉语拼音发音:gang ba li

中文意思: 差劲
汉语拼音发音:sai dei

中文意思: 脸
汉语拼音发音:kou wa

中文意思: 玩笑
汉语拼音发音:jao den

中文意思: 不是~不是~ 没有~没有~
汉语拼音发音:you yi you yi

中文意思: 谢谢
汉语拼音发音:a li ya duo

中文意思: 鞋
汉语拼音发音:ku zi

中文意思: 好厉害
汉语拼音发音:zi you yi

中文意思: 这就去
汉语拼音发音:yi ma yi ku

中文意思: 好舒服
汉语拼音发音:yi mu ji

中文意思: 到此为止
汉语拼音发音:ku lei ma dei

中文意思: 洗澡
汉语拼音发音:hu lu

中文意思: 天鹅
汉语拼音发音:ha ke jao dang

中文意思: 恭喜
汉语拼音发音:ou mei dei dou

中文意思: 我走了
汉语拼音发音:yi ti ki ma si

中文意思: 没什么的
汉语拼音发音:nan da mu na yi

中文意思: 我吃了
汉语拼音发音:yi da ke ma si

中文意思: 接招
汉语拼音发音:yi ke zou

中文意思: 什么意思?
汉语拼音发音:nan jia suo li wa

中文意思: 你醒醒
汉语拼音发音:mi ou sa ma xi

中文意思: 大衣
汉语拼音发音:gou dou

中文意思: 雪
汉语拼音发音:you gi

中文意思: 怎么可能?
汉语拼音发音:ma sa ka

中文意思: 说的也是
汉语拼音发音:sou da nei

中文意思: 动手吧
汉语拼音发音:yi ma lu ka

中文意思: 那是什么
汉语拼音发音:nan da sou li wa

中文意思: 暴走
汉语拼音发音:a ba lei lu

中文意思: 浪费
汉语拼音发音:mou dai nei

中文意思: 不行
汉语拼音发音:da mei

中文意思: 我靠
汉语拼音发音:wo kao

中文意思: 放心,安心
汉语拼音发音:an xin xi lou

中文意思: 剪
汉语拼音发音:ki lu

中文意思: 可以
汉语拼音发音:yi dei si

中文意思: 去哪儿?
汉语拼音发音:dou gu yi gu nou

中文意思: 热
汉语拼音发音:ji

中文意思: 救命
汉语拼音发音:ta zi gei dei

中文意思: 我出去了
汉语拼音发音:yi di ki ma si

中文意思: 真可疑
汉语拼音发音:a ya xi

中文意思: 四面楚歌
汉语拼音发音:si mian chu ge

中文意思: 朋友
汉语拼音发音:tou mao da ji

中文意思: 搞定
汉语拼音发音:ya da

中文意思: 迟到了
汉语拼音发音:xi gou gu

中文意思: 惨了
汉语拼音发音:ma zei

中文意思: 呆会见
汉语拼音发音:ma dai nei

中文意思: 很顺利
汉语拼音发音:ma ji xi

中文意思: 攻击
汉语拼音发音:ku yi gi

中文意思: 批准
汉语拼音发音:to ga xi lu

中文意思: 请说
汉语拼音发音:dou zou

中文意思: 预备
汉语拼音发音:yo i

中文意思: 没关系
汉语拼音发音:yi wa you

中文意思: 传说
汉语拼音发音:den sei si

中文意思: 小姐
汉语拼音发音:ou jiu sa ma

中文意思: 所以
汉语拼音发音:da ga

中文意思: 好吃
汉语拼音发音:ou you xi

中文意思: 当然了
汉语拼音发音:mou ji lou

中文意思: 请指示
汉语拼音发音:kou xi jiu

中文意思: 没有
汉语拼音发音:mei you

中文意思: 糟了,不妙
汉语拼音发音:tai hai zi

中文意思: 温柔
汉语拼音发音:a ya lu

中文意思: 优点
汉语拼音发音:yi dou gou lou

中文意思: 幸福
汉语拼音发音:xi ya sei na

中文意思: 快去
汉语拼音发音:a you ku

中文意思: 大成功
汉语拼音发音:dai sei gu

中文意思: 大失败
汉语拼音发音:dai bin qie

中文意思: 好担心
汉语拼音发音:xin bai dei

中文意思: 左
汉语拼音发音:xi da li

中文意思: 慢慢地
汉语拼音发音:yi ku li

中文意思: 坏东西
汉语拼音发音:kou nou mou dou

中文意思: 好痛
汉语拼音发音:yi dai

中文意思: 没有
汉语拼音发音:na yi kei duo

中文意思: 差不多是吧
汉语拼音发音:hu dou hu dou ni nei

中文意思: 搞错了
汉语拼音发音:ma ji lu

中文意思: 你怎么啦
汉语拼音发音:dou xi da nou

中文意思: 错觉
汉语拼音发音:sa ku ku

中文意思: 前进
汉语拼音发音:yi ka si

中文意思: 行动
汉语拼音发音:ya lu da

中文意思: 当然
汉语拼音发音:mou ji lou

中文意思: 讨厌
汉语拼音发音:ki la yi

中文意思: 我明白了
汉语拼音发音:wa ga li ma si

中文意思: 是谁
汉语拼音发音:na ni mou nou

中文意思: 这是为什么呢
汉语拼音发音:nan dei da lu

中文意思:有趣
汉语拼音发音:ou mou xi lu

中文意思: 这里
汉语拼音发音:kou ji

中文意思: 笑一个
汉语拼音发音:ha ji zi

中文意思: 果然如此
汉语拼音发音:sa si na da

中文意思: 我有看过
汉语拼音发音:a li ma si

中文意思: 莫名其妙
汉语拼音发音:ya dei la nai

中文意思: 不是真的吧?
汉语拼音发音:ma ji ka u

中文意思: 约会
汉语拼音发音:dai dou

中文意思: 别介意
汉语拼音发音:gi ni xi nai

中文意思: 这是什么?
汉语拼音发音:na ni gu lei

中文意思: 偷一下懒
汉语拼音发音:sa bu li you

中文意思: 在干什么呢?
汉语拼音发音:na ni xi dai lu nou

中文意思: 别管啦
汉语拼音发音:yi ga la

中文意思: 来吃啦
汉语拼音发音:yi da da ku

中文意思: 老爷子
汉语拼音发音:ou ya ji

中文意思: 马上回来
汉语拼音发音:si gu ma da lu

中文意思: 调查
汉语拼音发音:qiu sa

中文意思: 振作一点
汉语拼音发音:xi ga li xi dai

中文意思: 为什么
罗马字发音[国际拼音]:na zei na la

中文意思: 恭喜您
罗马字发音[国际拼音]:o mei dai do gu za i ma su

中文意思: 有一手嘛
汉语拼音发音:ya lu wa nei

中文意思: 退开
汉语拼音发音:sai mei lu

中文意思: 许可
罗马字发音[国际拼音]:Q ga

中文意思: 你好帅
汉语拼音发音:ka ku yi

中文意思: 这可不行
汉语拼音发音:sou li wa na li ma sa yi

中文意思: 得救了
汉语拼音发音:da si ka da

中文意思: 请等一下
汉语拼音发音:ou ma ji na sa yi

中文意思: 请看吧
汉语拼音发音:gu la na sa yi

中文意思: 所以呢
汉语拼音发音:sou lei dei

中文意思: 这是
汉语拼音发音:ku li wa

中文意思: 你在干什么啊
汉语拼音发音:na ni ya dai nou

中文意思: 我忘记了
汉语拼音发音:wa si lai dai da

中文意思: 真是的
汉语拼音发音:ta ku mou

中文意思: 这样下去
汉语拼音发音:ku nou ma ma dei wa

December 25

C++优先级列表

The operators at the top of this list are evaluated first.

Precedence Operator Description Example Associativity
1 ::
Scoping operator
Class::age = 2;
none
2 ()
[]
->
.
++
--
Grouping operator
Array access
Member access from a pointer
Member access from an object
Post-increment
Post-decrement
(a + b) / 4;
array[4] = 2;
ptr->age = 34;
obj.age = 34;
for( i = 0; i < 10; i++ ) ...
for( i = 10; i > 0; i-- ) ...
left to right
3 !
~
++
--
-
+
*
&
(type)
sizeof
Logical negation
Bitwise complement
Pre-increment
Pre-decrement
Unary minus
Unary plus
Dereference
Address of
Cast to a given type
Return size in bytes
if( !done ) ...
flags = ~flags;
for( i = 0; i < 10; ++i ) ...
for( i = 10; i > 0; --i ) ...
int i = -1;
int i = +1;
data = *ptr;
address = &obj;
int i = (int) floatNum;
int size = sizeof(floatNum);
right to left
4 ->*
.*
Member pointer selector
Member object selector
ptr->*var = 24;
obj.*var = 24;
left to right
5 *
/
%
Multiplication
Division
Modulus
int i = 2 * 4;
float f = 10 / 3;
int rem = 4 % 3;
left to right
6 +
-
Addition
Subtraction
int i = 2 + 3;
int i = 5 - 1;
left to right
7 <<
>>
Bitwise shift left
Bitwise shift right
int flags = 33 << 1;
int flags = 33 >> 1;
left to right
8 <
<=
>
>=
Comparison less-than
Comparison less-than-or-equal-to
Comparison greater-than
Comparison geater-than-or-equal-to
if( i < 42 ) ...
if( i <= 42 ) ...
if( i > 42 ) ...
if( i >= 42 ) ...
left to right
9 ==
!=
Comparison equal-to
Comparison not-equal-to
if( i == 42 ) ...
if( i != 42 ) ...
left to right
10 & Bitwise AND flags = flags & 42; left to right
11 ^ Bitwise exclusive OR flags = flags ^ 42; left to right
12 | Bitwise inclusive (normal) OR flags = flags | 42; left to right
13 && Logical AND if( conditionA && conditionB ) ... left to right
14 || Logical OR if( conditionA || conditionB ) ... left to right
15 ? : Ternary conditional (if-then-else) int i = (a > b) ? a : b; right to left
16 =
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
Assignment operator
Increment and assign
Decrement and assign
Multiply and assign
Divide and assign
Modulo and assign
Bitwise AND and assign
Bitwise exclusive OR and assign
Bitwise inclusive (normal) OR and assign
Bitwise shift left and assign
Bitwise shift right and assign
int a = b;
a += 3;
b -= 4;
a *= 5;
a /= 2;
a %= 3;
flags &= new_flags;
flags ^= new_flags;
flags |= new_flags;
flags <<= 2;
flags >>= 2;
right to left
17 , Sequential evaluation operator for( i = 0, j = 0; i < 10; i++, j++ ) ... left to right

It is important to note that there is no specified precedence for the operation of changing a variable into a value. For example, consider the following code:

  float x, result;  x = 1;  result = x / ++x;

The value of result is not guaranteed to be consistent across different compilers, because it is not clear whether the computer should change the variable x (the one that occurs on the left side of the division operator) before using it. Depending on which compiler you are using, the variable result can either be 1.0 or 0.5. The bottom line is that you should not use the same variable multiple times in a single expression when using operators with side effects.

#pragma 预处理指令详解

    在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。
#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。
依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 
    其格式一般为: #pragma  para 
    其中para为参数,下面来看一些常用的参数。 
 
(1)message 参数

    message参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,
这对于源代码信息的控制是非常重要的。其使用方法为: 
    #pragma  message("消息文本") 
    当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 
    当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,
此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏,
可以用下面的方法:
    #ifdef  _X86 
    #pragma  message("_X86  macro  activated!") 
    #endif 
    我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示"_86  macro  activated!"。
我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。 
      
(2)另一个使用得比较多的pragma参数是code_seg

    格式如: 
    #pragma  code_seg( ["section-name" [, "section-class"] ] ) 
    它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。 
 
(3)#pragma once  (比较常用) 

    只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,
但是考虑到兼容性并没有太多的使用它。 

(4)#pragma  hdrstop

    表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,
但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。   
    有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。
你可以用#pragma  startup指定编译优先级,如果使用了#pragma  package(smart_init),
BCB就会根据优先级的大小先后编译。   
      
(5)#pragma  resource  "*.dfm"

    表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体 
外观的定义。   
        
(6)#pragma  warning( disable: 4507 34; once: 4385; error: 164 )
 
    等价于: 
    #pragma  warning( disable: 4507 34 )    //  不显示4507和34号警告信息 
    #pragma  warning( once: 4385 )          //  4385号警告信息仅报告一次 
    #pragma  warning( error: 164 )          //  把164号警告信息作为一个错误。 

    同时这个pragma  warning  也支持如下格式: 
    #pragma  warning( push [, n ] ) 
    #pragma  warning( pop ) 
    这里n代表一个警告等级(1---4)。 
    #pragma  warning( push )保存所有警告信息的现有的警告状态。 
    #pragma  warning( push, n )保存所有警告信息的现有的警告状态,并且把全局警告等级设定为n。   
    #pragma  warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的一切改动取消。例如: 
    #pragma  warning( push ) 
    #pragma  warning( disable: 4705 ) 
    #pragma  warning( disable: 4706 ) 
    #pragma  warning( disable: 4707 ) 
    //....... 
    #pragma  warning(  pop  )   
    在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。 

(7)#pragma  comment(...) 

    该指令将一个注释记录放入一个对象文件或可执行文件中。 
常用的lib关键字,可以帮我们连入一个库文件。如:
    #pragma  comment(lib, "comctl32.lib")
    #pragma  comment(lib, "vfw32.lib")
    #pragma  comment(lib, "wsock32.lib")
  

    每个编译程序可以用#pragma指令激活或终止该编译程序支持的一些编译功能。

    例如,对循环优化功能: 
    #pragma  loop_opt(on)     //  激活 
    #pragma  loop_opt(off)    //  终止 

    有时,程序中会有些函数会使编译器发出你熟知而想忽略的警告,
    如“Parameter  xxx  is  never  used  in  function  xxx”,可以这样: 
    #pragma  warn  —100         //  Turn  off  the  warning  message  for  warning  #100 
    int  insert_record(REC  *r) 
    {  /*  function  body  */  } 
    #pragma  warn  +100         //  Turn  the  warning  message  for  warning  #100  back  on 
    函数会产生一条有唯一特征码100的警告信息,如此可暂时终止该警告。 

    每个编译器对#pragma的实现不同,在一个编译器中有效在别的编译器中几乎无效。可从编译器的文档中查看。


补充 —— #pragma pack 与 内存对齐问题


    许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k
(通常它为4或8)的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。

    Win32平台下的微软C编译器(cl.exe for 80x86)在默认情况下采用如下的对齐规则:
    任何基本数据类型T的对齐模数就是T的大小,即sizeof(T)。比如对于double类型(8字节),
就要求该类型数据的地址总是8的倍数,而char类型数据(1字节)则可以从任何一个地址开始。

    Linux下的GCC奉行的是另外一套规则(在资料中查得,并未验证,如错误请指正):
    任何2字节大小(包括单字节吗?)的数据类型(比如short)的对齐模数是2,而其它所有超过2字节的数据类型
(比如long,double)都以4为对齐模数。

    ANSI C规定一种结构类型的大小是它所有字段的大小以及字段之间或字段尾部的填充区大小之和。
填充区就是为了使结构体字段满足内存对齐要求而额外分配给结构体的空间。那么结构体本身有什么对齐要求吗?
有的,ANSI C标准规定结构体类型的对齐要求不能比它所有字段中要求最严格的那个宽松,可以更严格。


如何使用c/c++中的对齐选项

    vc6中的编译选项有 /Zp[1|2|4|8|16] ,/Zp1表示以1字节边界对齐,相应的,/Zpn表示以n字节边界对齐。
n字节边界对齐的意思是说,一个成员的地址必须安排在成员的尺寸的整数倍地址上或者是n的整数倍地址上,取它们中的最小值。
也就是:
    min ( sizeof ( member ),  n)

    实际上,1字节边界对齐也就表示了结构成员之间没有空洞。
    /Zpn选项是应用于整个工程的,影响所有的参与编译的结构。
    要使用这个选项,可以在vc6中打开工程属性页,c/c++页,选择Code Generation分类,在Struct member alignment可以选择。

    要专门针对某些结构定义使用对齐选项,可以使用#pragma pack编译指令:

(1) #pragma  pack( [ n ] )

    该指令指定结构和联合成员的紧凑对齐。而一个完整的转换单元的结构和联合的紧凑对齐由/Zp 选项设置。
紧凑对齐用pack编译指示在数据说明层设置。该编译指示在其出现后的第一个结构或联合说明处生效。
该编译指示对定义无效。
    当你使用#pragma  pack ( n ) 时, 这里n 为1、2、4、8 或16。
    第一个结构成员之后的每个结构成员都被存储在更小的成员类型或n 字节界限内。
如果你使用无参量的#pragma  pack, 结构成员被紧凑为以/Zp 指定的值。该缺省/Zp 紧凑值为/Zp8 。

(2) 编译器也支持以下增强型语法:
    #pragma  pack( [ [ { push | pop } , ] [ identifier, ] ] [ n] )

    若不同的组件使用pack编译指示指定不同的紧凑对齐, 这个语法允许你把程序组件组合为一个单独的转换单元。
带push参量的pack编译指示的每次出现将当前的紧凑对齐存储到一个内部编译器堆栈中。
    编译指示的参量表从左到右读取。如果你使用push, 则当前紧凑值被存储起来;
如果你给出一个n 的值, 该值将成为新的紧凑值。若你指定一个标识符, 即你选定一个名称,
则该标识符将和这个新的的紧凑值联系起来。

    带一个pop参量的pack编译指示的每次出现都会检索内部编译器堆栈顶的值,并且使该值为新的紧凑对齐值。
如果你使用pop参量且内部编译器堆栈是空的,则紧凑值为命令行给定的值, 并且将产生一个警告信息。
若你使用pop且指定一个n的值, 该值将成为新的紧凑值。若你使用p o p 且指定一个标识符,
所有存储在堆栈中的值将从栈中删除, 直到找到一个匹配的标识符, 这个与标识符相关的紧凑值也从栈中移出,
并且这个仅在标识符入栈之前存在的紧凑值成为新的紧凑值。如果未找到匹配的标识符,
将使用命令行设置的紧凑值, 并且将产生一个一级警告。缺省紧凑对齐为8 。

   pack编译指示的新的增强功能让你编写头文件, 确保在遇到该头文件的前后的
紧凑值是一样的。

(3) 栈内存对齐

    在vc6中栈的对齐方式不受结构成员对齐选项的影响。它总是保持对齐,而且对齐在4字节边界上。

 

November 26

VC编译选项

/****优化****/ 
/O1         最小化空间                               minimize space
/Op[-]     改善浮点数一致性                        improve floating-pt consistency
/O2         最大化速度                               maximize speed
/Os         优选代码空间                             favor code space
/Oa         假设没有别名                             assume no aliasing
/Ot         优选代码速度                             favor code speed
/Ob         内联展开(默认n=0)                      inline expansion (default n=0)
/Ow        假设交叉函数别名                        assume cross-function aliasing
/Od         禁用优化(默认值)                        disable optimizations (default)
/Ox         最大化选项(/Ogityb2 /Gs)             maximum opts. (/Ogityb1 /Gs)
/Og         启用全局优化                             enable global optimization 
/Oy[-]     启用框架指针省略                        enable frame pointer omission
/Oi          启用内建函数                             enable intrinsic functions


/****代码生成****/
/G3         为 80386 进行优化                     optimize for 80386
/G4         为 80486 进行优化                     optimize for 80486
/GR[-]     启用 C++ RTTI                         enable C++ RTTI
/G5         为 Pentium 进行优化                   optimize for Pentium
/G6         为 Pentium Pro 进行优化              optimize for Pentium Pro
/GX[-]     启用 C++ 异常处理(与 /EHsc 相同)  enable C++ EH (same as /EHsc)
/EHs        启用同步 C++ 异常处理                enable synchronous C++ EH
/GD         为 Windows DLL 进行优化             optimize for Windows DLL
/GB         为混合模型进行优化(默认)              optimize for blended model (default)
/EHa        启用异步 C++ 异常处理                enable asynchronous C++ EH
/Gd          __cdecl 调用约定                       __cdecl calling convention 
/EHc        extern“C”默认为 nothrow         extern "C" defaults to nothrow
/Gr           __fastcall 调用约定                    __fastcall calling convention
/Gi[-]       启用增量编译                             enable incremental compilation
/Gz          __stdcall 调用约定                     __stdcall calling convention 
/Gm[-]      启用最小重新生成                       enable minimal rebuild
/GA          为 Windows 应用程序进行优化       optimize for Windows Application
/Gf           启用字符串池                             enable string pooling 
/QIfdiv[-]  启用 Pentium FDIV 修复              enable Pentium FDIV fix 
/GF          启用只读字符串池                        enable read-only string pooling 
/QI0f[-]    启用 Pentium 0x0f 修复               enable Pentium 0x0f fix
/Gy          分隔链接器函数                          separate functions for linker
/GZ          启用运行时调试检查                     enable runtime debug checks
/Gh          启用钩子函数调用                       enable hook function call
/Ge          对所有函数强制堆栈检查                force stack checking for all funcs
/Gs[num]   禁用堆栈检查调用                       disable stack checking calls


/****输出文件****/ 
/Fa[file]    命名程序集列表文件                     name assembly listing file
/Fo          命名对象文件                             name object file
/FA[sc]    配置程序集列表                           configure assembly listing 
/Fp          命名预编译头文件                        name precompiled header file
/Fd[file]    命名 .PDB 文件                          name .PDB file 
/Fr[file]    命名源浏览器文件                        name source browser file
/Fe          命名可执行文件                          name executable file
/FR[file]    命名扩展 .SBR 文件                    name extended .SBR file
/Fm[file]    命名映射文件                            name map file


/****预处理器****/
/FI        命名强制包含文件                          name forced include file
/C         不吸取注释                                  don't strip comments 
/U         移除预定义宏                               remove predefined macro
/D{=|#} 定义宏                                      define macro
/u         移除所有预定义宏                          remove all predefined macros
/E         将预处理定向到标准输出                  preprocess to stdout
/I          添加到包含文件的搜索路径               add to include search path
/EP        将预处理定向到标准输出,不要带行号  preprocess to stdout, no #line
/X         忽略“标准位置”                          ignore "standard places"
/P         预处理到文件                               preprocess to file


/****语言****/ 
/Zi         启用调试信息                             enable debugging information
/Zl         忽略 .OBJ 中的默认库名                omit default library name in .OBJ
/ZI        启用调试信息的“编辑并继续”功能    enable Edit and Continue debug info
/Zg        生成函数原型                             generate function prototypes
/Z7        启用旧式调试信息                        enable old-style debug info
/Zs        只进行语法检查                          syntax check only
/Zd        仅要行号调试信息                       line number debugging info only
/vd{0|1} 禁用/启用 vtordisp                    disable/enable vtordisp
/Zp[n]     在 n 字节边界上包装结构             pack structs on n-byte boundary
/vm        指向成员的指针类型                    type of pointers to members
/Za         禁用扩展(暗指 /Op)                   disable extensions (implies /Op)
/noBool    禁用“bool”关键字                   disable "bool" keyword
/Ze         启用扩展(默认)                         enable extensions (default)


/****杂项****/                                 
/?, /help  打印此帮助消息                          print this help message
/c          只编译,不链接                          compile only, no link
/W         设置警告等级(默认 n=1)               set warning level (default n=1)
/H          最大化外部名称长度                     max external name length
/J           默认 char 类型是                       unsigned  default char type is unsigned
/nologo   取消显示版权消息                        suppress copyright message
/WX       将警告视为错误                           treat warnings as errors
/Tc        将文件编译为 .c                         compile file as .c 
/Yc[file]  创建 .PCH 文件                          create .PCH file
/Tp        将文件编译为 .cpp                      compile file as .cpp 
/Yd        将调试信息放在每个 .OBJ 中           put debug info in every .OBJ
/TC        将所有文件编译为 .c                    compile all files as .c 
/TP        将所有文件编译为 .cpp                 compile all files as .cpp 
/Yu[file]  使用 .PCH 文件                          use .PCH file
/V          设置版本字符串                           set version string
/YX[file]  自动的 .PCH 文件                       automatic .PCH
/w          禁用所有警告                             disable all warnings
/Zm        最大内存分配(默认为 %)               max memory alloc (% of default)


/****链接****/ 
/MD        与 MSVCRT.LIB 链接                  link with MSVCRT.LIB
/MDd      与 MSVCRTD.LIB 调试库链接         link with MSVCRTD.LIB debug lib
/ML        与 LIBC.LIB 链接                        link with LIBC.LIB
/MLd      与 LIBCD.LIB 调试库链接               link with LIBCD.LIB debug lib
/MT        与 LIBCMT.LIB 链接                    link with LIBCMT.LIB 
/MTd      与 LIBCMTD.LIB 调试库链接           link with LIBCMTD.LIB debug lib
/LD        创建 .DLL                                  Create .DLL 
/F          设置堆栈大小                              set stack size
/LDd       创建 .DLL 调试库                        Create .DLL debug libary
/link       [链接器选项和库]                         [linker options and libraries]

 

中国各省省名之由来

【山东】以在太行山之东而得名。唐大部分属河南道;宋设京东路,后分京东东、西路;金更名山东东、西路,为山东得名的开始;元设山东东西道;明置山东省,后改山东布政使司;清改山东省,省名至今未变。
【山西】以在太行山之西而得名。唐大部分属河东道;宋设河东路;金分河东北、南路;元设山西河东道,为山西得名的开始;明置山西省,后改山西布政使司;清改山西省,省名至今未变。
【河南】以在黄河之南而得名。西汉即有河南郡,为河南得名的开始。唐大部分属都畿道和河南道;宋设京畿路和京西北路;金改南京路;元设河南江北省和河南江北道;明置河南省,后改河南布政使司;清改河南省,省名至今未变。
【河北】以在黄河之北而得名。唐大部分属河北道,为河北得名的开始。宋设河北路,后分河北东、西路;金分河北东路设大名府路;元设燕南赵北道;明设北平省,后废省,所有府和直隶州直属中央,称北直隶;清改直隶省;1929年民国改河北省,省名至今未变。
【湖南】以在洞庭湖之南而得名。唐属江南西道和黔中道,后设湖南观察使,为湖南得名的开始;宋称湖南路;元设岭北湖南道;明属湖广省,后改省为湖广布政使司;清分湖广省置湖南省,省名至今未变。
【湖北】以在洞庭湖之北而得名。唐属江南东道、淮南道和山南东道;宋荆湖北路,简称湖北路,为湖北得名的开始;元设江南湖北道;明属湖广省,后改为省为湖广布政使司;清分湖广省置湖北省,省名至今未变。
【广西】以广南西路简称得名。唐属岭南道;宋置广南西路,简称广西路,为广西得名的开始;元设广西两江道;明置广西省,后改广西布政使司;清改广西省;民国仍之;建国后改广西壮族自治区,区名至今未变。
【广东】以广南东路简称得名。唐属岭南道;宋以旧广州辖地置广南东路,简称广东路,为广得名的开始;元设海北广东道;明置广东省,后改广东布政使司;清改广东省,省名至今未变。
【黑龙江】以黑龙江而得名。清分吉林将军置黑龙江将军,清末改黑龙江省,省名至今未变。
【辽宁】以辽河流域永久安宁得名。唐属河北道;辽置东京路;金仍之;元置辽阳行省;明为辽东都司;清设辽东将军,后改奉天将军,再改盛京将军,清末改奉天省;1929民国改辽宁省,为辽宁得名的开始;伪满复改奉天省,1945收复后仍改辽宁省;建国初分辽东省和辽西省,后合并恢复辽宁省,省名至今未变。
【浙江】以浙江(又称钱塘江)得名。唐属江南东道,设浙东观察使和浙西观察使;宋置两浙路,南宋又分两浙东路和两浙西路,简称浙东路和浙西路;元设浙东海右道和江南浙西道;明设浙江省,为浙江得名的开始,后改浙江布政使司;清改浙江省,省名至今未变。
【安徽】以安庆、徽州各取一字得名。唐大部属江南西道和淮南道;宋置江南东路和淮南西路;元属江东建康道和淮西江北道;明境内各府和直隶州直属中央,称为直隶,后改南直隶;清改江南省,后分设安徽省,为安徽得名的开始;民国仍之;建国初分设皖北行署和皖南行署,后合并恢复安徽省,省名至今未变。
【江苏】以江宁、苏州各取一字得名。唐大部属江南东道和淮南道;宋置江南东路、两浙西路和淮南东路;元属江东建康道、江南浙西道、淮东江北道;明境内各府和直隶州直属中央,称为直隶,后改南直隶;清改江南省,后分设江苏省,为江苏得名的开始;民国仍之;建国初分设苏北行署和苏南行署,后合并恢复江苏省,省名至今未变。
【福建】以福州、建州各取一字得名。唐属江南东道,后设福建观察使,为福建得名的开始;宋置福建路;元设福建海右道;明置福建省,后改福建布政使司;清改福建省,省名至今未变。
【甘肃】以甘州、肃州各取一字得名。唐属关内道和陇右道;宋时东部属宋秦凤路,西部属西夏;金分秦凤路为秦凤、临洮、庆原三路;元初以甘州置甘肃路(不久即改甘州路),为甘肃得名的开始,后改宁夏行省为甘肃行省;明为陕西行都司;清分陕西省恢复甘肃省,省名至今未变。
【江西】以江南的西部得名。唐属江南西道,后设江西观察使,为江西得名的开始;宋置江南西路,简称江西路;元设江西行省及江西湖东道;明置江西省,后改江西布政使司;清改江西省,省名至今未变。
【云南】以在云岭之南得名。汉即设云南县,为云南得名的开始。唐为六诏,后为南诏;宋为大理国;元置云南行省及云南诸路道;明置云南省,后改云南布政使司;清改云南省,省名至今未变。
【贵州】以贵山得名。唐为黔中道;宋属夔州路;元属湖广行省;明置贵州土司,是为贵州得名的开始,后置贵州布政使司;清改贵州省,省名至今未变。
【四川】以益利梓夔四路得名。唐大部属剑南道和山南东、山南西道;宋设川峡路(注:非川陕路),后分设西川路和峡西路,再分西川路为益州路和利州路,分峡西路为梓州路和夔州路,合称四川,其间设四川制置使,为四川得名的开始,后改益州路为成都府路,改梓州路为潼川府路,分利州路为利州东、西路。元置四川省和四川行省和西蜀四川道;明置四川省,后改四川布政使司;清改四川省;建国初分为川东、川南、川西、川北四行署,后合并恢复四川省,省名至今未变。
【青海】以青海湖得名。唐宋属吐蕃;元其土地属宣政院管辖;明属朵甘都司等;清初为卫藏地,后分设西宁办事大臣,又称青海办事大臣,为青海得名的开始;民国初设青海办事长官,后属甘边宁海镇守使,之后建青海省,省名至今未变。
【陕西】以陕原之西得名。唐大部属京畿道和关内道;宋初设陕西路,为陕西得名的开始,后分设永兴军路,以军事重镇延宁、环庆、秦凤、熙河五路设陕西五路经略使;元设陕西行省和陕西汉中道;明置陕西省,后改陕西布政使司;清改陕西省,省名至今未变。
【吉林】以吉林乌拉前二字得名,满语吉林乌拉意为沿江。唐属东北民族地;辽属东京路;金属上京路;元属辽阳行省;明属奴儿干都司;清设吉林将军,清末改吉林省,省名至今未变。
【宁夏】以西夏安宁得名。唐属关内道;宋时属西夏;元灭西夏后以旧地设西夏行省,不久改宁夏行省,治所为宁夏路,为宁夏得名的开始,后改行省为甘肃行省,迁甘州路。明属陕西省,改宁夏路为宁夏卫;清改宁夏府,属甘肃省,并设宁夏将军;民国初设甘边宁夏护军使。
【海南】以海南岛得名。唐属岭南道;宋属广南西路;元设海南海北道,是为海南得名的开始;明属广东省;清仍之,正式称琼崖为海南岛;民国仍之,后设海南特别行政区,仍属省;建国后设海南行政区,仍属省,1988年为海南省,省名至今未变。
【台湾】以台湾府得名。唐宋均为化外地;元在澎湖设巡检司,兼管台湾渔民;明为荷兰所占,明末郑成功收复,设东宁省及承天府;清郑氏,设台湾府及台厦道,是为台湾得名的开始,并正式称台湾岛,后改台厦道为台湾道;清末设台湾省,后为日占,仍称台湾;民国收复,恢复台湾省,省名至今未变。
【西藏】以清正式定名得名。唐宋为吐蕃;元属宣政院;明称乌思藏,设都司等;清初称卫藏,卫即前藏,藏即后藏;后正式定名为西藏,为西藏得名的开始;清设西藏办事大臣;民国初西藏地方;建国后仍之,后改西藏自治区,区名至今未变。
【内蒙古】以漠南蒙古得名。唐为突厥地;宋时出现蒙古部落;后建元朝,其地直属中书省及岭北行省;明分达靼鞑及瓦剌;清统一蒙古,以漠南蒙古居内地称内蒙古,漠北蒙古居边外称外蒙古,并属理藩院。民国初分属热河、察哈尔、绥远等特别区,后均改省;建国前中共以今内蒙古东部设内蒙古自治区,区名至今未变。
【新疆】以其为新辟疆土而称新疆。唐宋为西域;元明为察哈台汗国和窝阔台汗国地;清统一其地,其北部称回部、南部称准部,合称回疆,设伊犁将军,又以其为新辟疆土而称新疆(其时贵州新辟疆土亦称新疆);清未设新疆省,是为新疆得名的开始;民国仍之;建国后改新疆维吾儿自治区,区名至今未变
November 22

C字符串函数

bcmp(比较内存内容) 
相关函数  bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp
表头文件  #include<string.h>
定义函数  int bcmp ( const void *s1,const void * s2,int n);
函数说明  bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0。
返回值  若参数s1 和s2 所指的内存内容都完全相同则返回0 值,否则返回非零值。
附加说明  建议使用memcmp()取代。
范例  参考memcmp()。
 
bcopy(拷贝内存内容)
相关函数  memccpy,memcpy,memmove,strcpy,ctrncpy
表头文件  #include <string.h>
定义函数  void bcopy ( const void *src,void *dest ,int n);
函数说明  bcopy()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址,不过参数src与dest在传给函数时是相反的位置。
返回值
附加说明  建议使用memcpy()取代
范例  #include<string.h>
main()
{
char dest[30]=”string(a)”;
char src[30]=”string\0string”;
int i;
bcopy(src,dest,30);/* src指针放在前*/
printf(bcopy(): “)
for(i=0;i<30;i++)
printf(“%c”,dest[i]);
memcpy(dest src,30); /*dest指针放在钱*/
printf(‘\nmemcpy() : “);
for(i=0;i<30;i++)
printf(“%c”,dest[i]);
执行  bcopy() : string string
memcpy() :string sring
 
bzero(将一段内存内容全清为零)
相关函数  memset,swab
表头文件  #include<string.h>
定义函数  void bzero(void *s,int n);
函数说明  bzero()会将参数s所指的内存区域前n个字节,全部设为零值。相当于调用memset((void*)s,0,size_tn);
返回值
附加说明  建议使用memset取代
范例  参考memset()。
 
index(查找字符串中第一个出现的指定字符)
相关函数  rindex,srechr,strrchr
表头文件  #include<string.h>
定义函数  char * index( const char *s, int c);
函数说明  index()用来找出参数s字符串中第一个出现的参数c地址,然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部分。
返回值  如果找到指定的字符则返回该字符所在地址,否则返回0。
范例  #include<string.h>
main()
{
char *s =”0123456789012345678901234567890”;
char *p;
p =index(s,’5’);
printf(%s\n”,p);
}
执行  5.68E+25
 
memccpy(拷贝内存内容)
相关函数  bcopy,memcpy,memmove,strcpy,strncpy
表头文件  #include<string.h>
定义函数  void * memccpy(void *dest, const void * src, int c,size_t n);
函数说明  memccpy()用来拷贝src所指的内存内容前n个字节到dest所指的地址上。与memcpy()不同的是,memccpy()会在复制时检查参数c是否出现,若是则返回dest中值为c的下一个字节地址。
返回值  返回指向dest中值为c的下一个字节指针。返回值为0表示在src所指内存前n个字节中没有值为c的字节。
范例  #include<string.h>
main()
{
char a[]="string[a]";
char b[]="string(b)";
memccpy(a,b,'B',sizeof(b));
printf("memccpy():%s\n",a);
}
执行  memccpy():string(b)
 
memchr(在某一内存范围中查找一特定字符)
相关函数  index,rindex,strchr,strpbrk,strrchr,strsep,strspn,strstr
表头文件  #include<string.h>
定义函数  void * memchr(const void *s,int c,size_t n);
函数说明  memchr()从头开始搜寻s所指的内存内容前n个字节,直到发现第一个值为c的字节,则返回指向该字节的指针。
返回值  如果找到指定的字节则返回该字节的指针,否则返回0。
范例  #include <string.h>
main()
{
char *s="0123456789012345678901234567890";
char *p;
p=memchr(s,'5',10);
printf("%s\n",p);
}
执行  5.68E+25
 
memcmp(比较内存内容)
相关函数  bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp
表头文件  #include<string.h>
定义函数  int memcmp (const void *s1,const void *s2,size_t n);
函数说明  memcmp()用来比较s1和s2所指的内存区间前n个字符。字符串大小的比较是以ASCII码表上的顺序来决定,次顺序亦为字符的值。memcmp()首先将s1第一个字符值减去s2第一个字符的值,若差为0则再继续比较下个字符,若差值不为0则将差值返回。例如,字符串"Ac"和"ba"比较则会返回字符'A'(65)和'b'(98)的差值(-33)。
返回值  若参数s1和s2所指的内存内容都完全相同则返回0值。s1若大于s2则返回大于0的值。s1若小于s2则返回小于0的值。
范例  #include<string.h>
main()
{
char *a ="aBcDeF";
char *b="AbCdEf";
char *c="aacdef";
char *d="aBcDeF";
printf("memcmp(a,b):%d\n",memcmp((void*)a,(void*) b,6));
printf("memcmp(a,c):%d\n",memcmp((void*)a,(void*) c,6));
printf("memcmp(a,d):%d\n",memcmp((void*)a,(void*) d,6));
执行  memcmp(a,b):1 /*字符串a>字符串b,返回1*/
memcmp(a,c):-1 /* 字符串a<字符串c,返回-1*/
memcmp(a,d):0 /*字符串a=字符串d,返回0*/
 
memcpy(拷贝内存内容)
相关函数  bcopy,memccpy,memcpy,memmove,strcpy,strncpy
表头文件  #include<string.h>
定义函数  void * memcpy (void * dest ,const void *src, size_t n);
函数说明  memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束。
返回值  返回指向dest的指针。
附加说明  指针src和dest所指的内存区域不可重叠。
范例  #include<string.h>
main()
{
char a[30]="string (a)";
char b[30]="string\0string";
int i;
strcpy(a,b);
printf("strcpy():");
for(i=0;i<30;i++)
printf("%c",a[i]);
memcpy(a,b,30);
printf("\nmemcpy() :");
for(i=0;i<30;i++)
printf("%c",a[i]);
}
执行  strcpy() : string a )
memcpy() : string string
 
memmove(拷贝内存内容)
相关函数  bcopy,memccpy,memcpy,strcpy,strncpy
表头文件  #include<string.h>
定义函数  void * memmove(void *dest,const void *src,size_t n);
函数说明  memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用memcpy()略慢些。
返回值  返回指向dest的指针。
附加说明  指针src和dest所指的内存区域可以重叠。
范例  参考memcpy()。
 
memset(将一段内存空间填入某值)
相关函数  bzero,swab
表头文件  #include<string.h>
定义函数  void * memset (void *s ,int c, size_t n);
函数说明  memset()会将参数s所指的内存区域前n个字节以参数c填入,然后返回指向s的指针。在编写程序时,若需要将某一数组作初始化,memset()会相当方便。
返回值  返回指向s的指针。
附加说明  参数c虽声明为int, 但必须是unsigned char ,所以范围在0到255之间。
范例  #include <string.h>
main()
{
char s[30];
memset (s,'A',sizeof(s));
s[30]='\0';
printf("%s\n",s);
}
执行  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
rindex(查找字符串中最后一个出现的指定字符)
相关函数  index,memchr,strchr,strrchr
表头文件  #include<string.h>
定义函数  char * rindex( const char *s,int c);
函数说明  rindex()用来找出参数s字符串中最后一个出现的参数c地址,然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部分。
返回值  如果找到指定的字符则返回该字符所在的地址,否则返回0。
范例  #include <string.h>
mian()
{
char *s ="0123456789012345678901234567890";
char *p;
p=rindex(s,'5');
printf("%s\n",p);
}
执行  567890
 
strcasecmp(忽略大小写比较字符串)
相关函数  bcmp,memcmp,strcmp,strcoll,strncmp
表头文件  #include<string.h>
定义函数  int strcasecmp (const char *s1, const char *s2);
函数说明  strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。
返回值  若参数s1和s2字符串相同则返回0。s1长度大于s2长度则返回大于0 的值,s1 长度若小于s2 长度则返回小于0的值。
范例  #include <string.h>
main()
{
char *a="aBcDeF";
char *b="AbCdEf";
if(!strcasecmp(a,b))
printf("%s=%s\n",a,b);
}
执行  aBcDeF=AbCdEf
 
strcat(连接两字符串)
相关函数  bcopy,memccpy,memcpy,strcpy,strncpy
表头文件  #include <string.h>
定义函数  char *strcat (char *dest,const char *src);
函数说明  strcat()会将参数src字符串拷贝到参数dest所指的字符串尾。第一个参数dest要有足够的空间来容纳要拷贝的字符串。
返回值  返回参数dest的字符串起始地址
范例  #include <string.h.>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strcat() : %s\n",a);
printf("after strcat() : %s\n",strcat(a,b));
}
执行  before strcat () : string(1)
after strcat () : string(1)string(2)
 
strchr(查找字符串中第一个出现的指定字符)
相关函数  index,memchr,rinex,strbrk,strsep,strspn,strstr,strtok
表头文件  #include<string.h>
定义函数  char * strchr (const char *s,int c);
函数说明  strchr()用来找出参数s字符串中第一个出现的参数c地址,然后将该字符出现的地址返回。
返回值  如果找到指定的字符则返回该字符所在地址,否则返回0。
范例  #include<string.h>
main()
{
char *s=0123456789012345678901234567890”;
char *p;
p=strchr(s,'5');
printf("%s\n",p);
}
执行  5.68E+25
 
strcmp(比较字符串)
相关函数  bcmp,memcmp,strcasecmp,strncasecmp,strcoll
表头文件  #include<string.h>
定义函数  int strcmp(const char *s1,const char *s2);
函数说明  strcmp()用来比较参数s1和s2字符串。字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1第一个字符值减去s2第一个字符值,若差值为0则再继续比较下个字符,若差值不为0则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
返回值  若参数s1和s2字符串相同则返回0。s1若大于s2则返回大于0的值。s1若小于s2则返回小于0 的值。
范例  #include<string.h>
main()
{
char *a="aBcDeF";
char *b="AbCdEf";
char *c="aacdef";
char *d="aBcDeF";
printf("strcmp(a,b) : %d\n",strcmp(a,b));
printf("strcmp(a,c) : %d\n",strcmp(a,c));
printf("strcmp(a,d) : %d\n",strcmp(a,d));
}
执行  strcmp(a,b) : 32
strcmp(a,c) :-31
strcmp(a,d) : 0
 
strcoll(采用目前区域的字符排列次序来比较字符串)
相关函数  strcmp,bcmp,memcmp,strcasecmp,strncasecmp
表头文件  #include<string.h>
定义函数  int strcoll( const char *s1, const char *s2);
函数说明  strcoll()会依环境变量LC_COLLATE所指定的文字排列次序来比较s1和s2 字符串。
返回值  若参数s1和s2字符串相同则返回0。s1若大于s2则返回大于0的值。s1若小于s2则返回小于0 的值。
附加说明  若LC_COLLATE为"POSIX"或"C",则strcoll()与strcmp()作用完全相同。
范例  参考strcmp()。
 
strcpy(拷贝字符串)
相关函数  bcopy,memcpy,memccpy,memmove
表头文件  #include<string.h>
定义函数  char *strcpy(char *dest,const char *src);
函数说明  strcpy()会将参数src字符串拷贝至参数dest所指的地址。
返回值  返回参数dest的字符串起始地址。
附加说明  如果参数dest所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。
范例  #include<string.h>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strcpy() :%s\n",a);
printf("after strcpy() :%s\n",strcpy(a,b));
}
执行  before strcpy() :string(1)
after strcpy() :string(2)
 
strcspn(返回字符串中连续不含指定字符串内容的字符数)
相关函数  strspn
表头文件  #inclued<string.h>
定义函数  size_t strcspn ( const char *s,const char * reject);
函数说明  strcspn()从参数s字符串的开头计算连续的字符,而这些字符都完全不在参数reject 所指的字符串中。简单地说,若strcspn()返回的数值为n,则代表字符串s开头连续有n个字符都不含字符串reject内的字符。
返回值  返回字符串s开头连续不含字符串reject内的字符数目。
范例  #include <string.h>
main()
{
char *str="Linux was first developed for 386/486-based pcs.";
printf("%d\n",strcspn(str," "));
printf("%d\n",strcspn(str,"/-"));
printf("%d\n",strcspn(str,"1234567890"));
}
执行  5 /*只计算到“ ”的出现,所以返回“Linux”的长度*/
33 /*计算到出现“/”或“-”,所以返回到“6”的长度*/
30 /* 计算到出现数字字符为止,所以返回“3”出现前的长度*/
 
strdup(复制字符串)
相关函数  calloc,malloc,realloc,free
表头文件  #include<string.h>
定义函数  char * strdup( const char *s);
函数说明  strdup()会先用maolloc()配置与参数s字符串相同的空间大小,然后将参数s字符串的内容复制到该内存地址,然后把该地址返回。该地址最后可以利用free()来释放。
返回值  返回一字符串指针,该指针指向复制后的新字符串地址。若返回NULL表示内存不足。
范例  #include<string.h>
main()
{
char a[]="strdup";
char *b;
b=strdup(a);
printf("b[ ]=\"%s\"\n",b);
}
执行  b[ ]="strdup"
 
strlen(返回字符串长度)
相关函数
表头文件  #include<string.h>
定义函数  size_t strlen (const char *s);
函数说明  strlen()用来计算指定的字符串s的长度,不包括结束字符"\0"。
返回值  返回字符串s的字符数。
范例  /*取得字符串str的长度*/
#include<string.h>
main()
{
char *str = "12345678";
printf("str length = %d\n", strlen(str));
}
执行  str length = 8
 
strncasecmp(忽略大小写比较字符串)
相关函数  bcmp,memcmp,strcmp,strcoll,strncmp
表头文件  #include<string.h>
定义函数  int strncasecmp(const char *s1,const char *s2,size_t n);
函数说明  strncasecmp()用来比较参数s1和s2字符串前n个字符,比较时会自动忽略大小写的差异。
返回值  若参数s1和s2 字符串相同则返回0。s1 若大于s2则返回大于0的值,s1若小于s2则返回小于0 的值。
范例  #include<string.h>
main()
{
char *a="aBcDeF";
char *b="AbCdEf";
if(!strncasecmp(a,b))
printf("%s =%s\n",a,b);
}
执行  aBcDef=AbCdEf
 
strncat(连接两字符串)
相关函数  bcopy,memccpy,memecpy,strcpy,strncpy
表头文件  #inclue <string.h>
定义函数  char * strncat(char *dest,const char *src,size_t n);
函数说明  strncat()会将参数src字符串拷贝n个字符到参数dest所指的字符串尾。第一个参数dest要有足够的空间来容纳要拷贝的字符串。
返回值  返回参数dest的字符串起始地址。
范例  #include <string.h>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strnact() :%s\n", a);
printf("after strncat() :%s\n", strncat(a,b,6));
}
执行  before strnact() : string(1)
after strncat() : string(1) string
 
strncpy(拷贝字符串)
相关函数  bcopy,memccpy,memcpy,memmove
表头文件  #include<string.h>
定义函数  char * strncpy(char *dest,const char *src,size_t n);
函数说明  strncpy()会将参数src字符串拷贝前n个字符至参数dest所指的地址。
返回值  返回参数dest的字符串起始地址。
范例  #inclue <string.h>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strncpy() : %s\n",a);
printf("after strncpy() : %s\n",strncpy(a,b,6));
}
执行  before strncpy() : string(1)
after strncpy() : string(1)
 
strpbrk(查找字符串中第一个出现的指定字符)
相关函数  index,memchr,rindex,strpbrk,strsep,strspn,strstr,strtok
表头文件  #include <include.h>
定义函数  char *strpbrk(const char *s,const char *accept);
函数说明  strpbrk()用来找出参数s 字符串中最先出现存在参数accept 字符串中的任意字符。
返回值  如果找到指定的字符则返回该字符所在地址,否则返回0。
范例  #include <string.h>
main()
{
char *s="0123456789012345678901234567890";
char *p;
p=strpbrk(s,"a1 839"); /*1会最先在s字符串中找到*/
printf("%s\n",p);
p=strprk(s,"4398");/*3 会最先在s 字符串中找到*/
printf("%s\n",p);
执行  1.23E+29
 
strrchr(查找字符串中最后出现的指定字符)
相关函数  index,memchr,rindex,strpbrk,strsep,strspn,strstr,strtok
表头文件  #include<string.h>
定义函数  char * strrchr(const char *s, int c);
函数说明  strrchr()用来找出参数s字符串中最后一个出现的参数c地址,然后将该字符出现的地址返回。
返回值  如果找到指定的字符则返回该字符所在地址,否则返回0。
范例  #include<string.h>
main()
{
char *s="0123456789012345678901234567890";
char *p;
p=strrchr(s,'5');
printf("%s\n",p);
}
执行  567890
 
strspn(返回字符串中连续不含指定字符串内容的字符数)
相关函数  strcspn,strchr,strpbrk,strsep,strstr
表头文件  #include<string.h>
定义函数  size_t strspn (const char *s,const char * accept);
函数说明  strspn()从参数s 字符串的开头计算连续的字符,而这些字符都完全是accept 所指字符串中的字符。简单的说,若strspn()返回的数值为n,则代表字符串s 开头连续有n 个字符都是属于字符串accept内的字符。
返回值  返回字符串s开头连续包含字符串accept内的字符数目。
范例  #include<string.h>
main()
{
char *str="Linux was first developed for 386/486-based PCs.";
char *t1="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d\n",strspn(str,t1));
}
执行  5 /*计算大小写字母。不包含“ ”,所以返回Linux的长度。*/
 
strstr(在一字符串中查找指定的字符串)
相关函数  index,memchr,rindex,strchr,strpbrk,strsep,strspn,strtok
表头文件  #include<string.h>
定义函数  char *strstr(const char *haystack,const char *needle);
函数说明  strstr()会从字符串haystack 中搜寻字符串needle,并将第一次出现的地址返回。
返回值  返回指定字符串第一次出现的地址,否则返回0。
范例  #include<string.h>
main()
{
char * s="012345678901234567890123456789";
char *p;
p= strstr(s,"901");
printf("%s\n",p);
}
执行  9.01E+21
 
strtok(分割字符串)
相关函数  index,memchr,rindex,strpbrk,strsep,strspn,strstr
表头文件  #include<string.h>
定义函数  char * strtok(char *s,const char *delim);
函数说明  strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回下一个分割后的字符串指针。
返回值  返回下一个分割后的字符串指针,如果已无从分割则返回NULL。
范例  #include<string.h>
main()
{
char s[]="ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z";
char *delim="-: ";
char *p;
printf("%s ";strtok(s,delim));
while((p=strtok(NULL,delim)))printf("%s ",p);
printf("\n");
}
执行  ab cd ef;gh i jkl;mnop;qrs tu vwx y;z /*-与:字符已经被\0 字符取代*/
 
Photo 1 of 1
More albums (1)
No list items have been added yet.