?? dsbc.cpp
字號(hào):
/***************************************************************************
Copyright @ 2006-2010, 高德軟件有限公司
All Rights Reserved.
設(shè)計(jì):CanJian(yangguojian@autonavi.com)
功能:1, 判斷輸入字符狀態(tài)(半角(DBC case) - false
還是全角(SBC case)- true)
2, 半角=>全角 (DBC=>SBC)
3, 全角=>半角 (SBC=>DBC)
版本:AutoNavi20060407
備注:非MFC方式實(shí)現(xiàn)判斷/轉(zhuǎn)換;
內(nèi)存的釋放(4-10)方式;
****************************************************************************/
#include "stdafx.h"
#include <iostream>
using namespace std;
bool IsSBC(const char *pszWord);
char* SBCToDBC(const char *pszWord);
char* DBCToSBC(const char *pszWord);
int main(int argc, char* argv[])
{
// 測(cè)試獲取字符的內(nèi)碼:高低字節(jié)
// 內(nèi)碼就是 該字符在該機(jī)器上的字符編碼
// 方式一:
char cWord[] = "中" ;
printf("%s: 0x%02X, 0x%02X\n",cWord, (unsigned char)(cWord[0]), (unsigned char)(cWord[1]));
printf("%s: %d, %d\n", cWord, (unsigned char)(cWord[0]), (unsigned char)(cWord[1]));
// 方式二:
unsigned char pByte1[] = "X" ;
printf("0x%02X, 0x%02X\n", pByte1[0], pByte1[1]);
printf("%d, %d\n", pByte1[0], pByte1[1]);
cout << endl << "-----IsDBC--Or--IsSBC-----" << endl;
bool bResult = IsSBC("國");
if (bResult)
cout << "全角" << endl;
else
cout << "半角" << endl;
char *ss = SBCToDBC("7");
cout << ss ;
cout << "111" << endl;
const char *s = "國" ;
cout << s << endl;
int nLen = strlen(s);
char *ps = new char[nLen+1];
char *pBck = ps;
ps = DBCToSBC(s);
cout << ps << endl;
delete []pBck;
return 0;
}
/**************************************************
功能: 判斷是否為全角(SBC),是返回true
/*************************************************/
bool IsSBC(const char *pszWord)
{
int nLen = strlen(pszWord);
for (int i=0; i<nLen; i++)
{
// 漢字(全角)第一字節(jié)總是大于163
if ((unsigned char)pszWord[i] > 163)
{
return true;
}
// 全角字符的第一個(gè)字節(jié)(右往左)總是為163
else if ((unsigned char)pszWord[i] == 163)
{
return true;
}
// 全角空格高低字節(jié)都是161(空格特例)
else if (((unsigned char)pszWord[i]==161) &&
((unsigned char)pszWord[i+1])==161)
{
return true;
}
// 半角字符
else if ((unsigned char)pszWord[i] < 163)
return false;
}
return false;
}
/**************************************************
功能: 全角字符=>半角字符
備注: 1, 當(dāng)為漢字全角字符時(shí),直接返回(無需轉(zhuǎn)換)
2, 只對(duì)非漢字類全角字符進(jìn)行轉(zhuǎn)換
3, 當(dāng)為空格時(shí),固定轉(zhuǎn)換
/*************************************************/
char* SBCToDBC(const char *pszWord)
{
int nLen = strlen(pszWord);
char *pszDBC = new char[nLen+1];
//char *pBck = pszDBC;
strcpy(pszDBC, pszWord);
// 如果是全角字符
bool isSBC = false; // 是否為全角
if ((unsigned char)pszWord[0] > 163)
return pszDBC;
isSBC = IsSBC(pszWord);
if (isSBC)
{
int CodeDBC = (unsigned char)pszWord[1];
// 空格全角字符固定為161(特例)
if (CodeDBC==161)
CodeDBC = 32;
else
CodeDBC -= 128;
//*pszDBC = (unsigned char)CodeDBC; // 方式一
pszDBC[0] = (unsigned char)CodeDBC; // 方式二
pszDBC[1] = '\0'; // 追加結(jié)束標(biāo)志
}
//delete [] pBck;
//pszDBC = pBck = NULL;
return pszDBC;
}
/**************************************************
功能: 將半角字符轉(zhuǎn)換為全角字符
/*************************************************/
char* DBCToSBC(const char *pszWord)
{
int nLen = strlen(pszWord);
char *pszSBC = new char[nLen+1];
strcpy(pszSBC, pszWord);
char SBC[3] = {0};
bool isDBC = IsSBC(pszWord);
if (!isDBC) // 字符是半角
{
int hightByte = (unsigned char)pszWord[0];
if (hightByte == 32)
{
SBC[0] = (char)161;
SBC[1] = (char)161;
SBC[3] = 0 ;
}
else
{
hightByte += 128;
SBC[0] = (char)163;
SBC[1] = (char)hightByte ;
SBC[3] = 0 ;
}
strcpy(pszSBC, SBC);
}
//delete []pszSBC;
return pszSBC;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -