📄 dsbc.cpp
字号:
/***************************************************************************
Copyright @ 2006-2010, 高德软件有限公司
All Rights Reserved.
设计:CanJian(yangguojian@autonavi.com)
功能:1, 判断输入字符状态(半角(DBC case) - false
还是全角(SBC case)- true)
2, 半角=>全角 (DBC=>SBC)
3, 全角=>半角 (SBC=>DBC)
版本:AutoNavi20060407
备注:非MFC方式实现判断/转换;
内存的释放(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[])
{
// 测试获取字符的内码:高低字节
// 内码就是 该字符在该机器上的字符编码
// 方式一:
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++)
{
// 汉字(全角)第一字节总是大于163
if ((unsigned char)pszWord[i] > 163)
{
return true;
}
// 全角字符的第一个字节(右往左)总是为163
else if ((unsigned char)pszWord[i] == 163)
{
return true;
}
// 全角空格高低字节都是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, 当为汉字全角字符时,直接返回(无需转换)
2, 只对非汉字类全角字符进行转换
3, 当为空格时,固定转换
/*************************************************/
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'; // 追加结束标志
}
//delete [] pBck;
//pszDBC = pBck = NULL;
return pszDBC;
}
/**************************************************
功能: 将半角字符转换为全角字符
/*************************************************/
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -