Files
envi-code/SourceCode/Code2026/tg_shs/shs_annotate/hzchg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

109 lines
2.9 KiB
C++

#include "stdafx.h"
void gb_2_big (unsigned char *in_str, unsigned chg_length, unsigned char *out_str ,unsigned *outstr_size,unsigned char *big_str) {
unsigned chg_start;
unsigned pos_of_big;
unsigned char rh1, rh2;
chg_start = 0;
out_str[0] = '\0';
*outstr_size = 0;
while ( chg_start < chg_length ){
rh1 = in_str[chg_start];
chg_start = chg_start + 1;
if ( rh1 >= 161 && rh1 < 251 && chg_start < chg_length ) {
rh2 = in_str[chg_start];
chg_start = chg_start + 1;
if ( rh2 >= 160 && chg_start <= chg_length ) {
pos_of_big = (rh1 - 161) * 96 * 2 + (rh2 - 160) * 2;
out_str[(*outstr_size)++] = big_str[pos_of_big];
out_str[(*outstr_size)++] = big_str[pos_of_big+1];
}
else {
if (chg_start <= chg_length){
out_str[(*outstr_size)++] = rh1;
chg_start = chg_start - 1;
}
}
}
else
if ( rh1 < 161 || rh1 >= 251 )
out_str[(*outstr_size)++] = rh1;
}
}
void big_2_gb (unsigned char *in_str, unsigned chg_length, unsigned char *out_str, unsigned *outstr_size, unsigned char *gb_str){
unsigned chg_start;
unsigned pos_of_gb;
unsigned char rh1,rh2;
chg_start = 0;
out_str[0] = '\0';
(*outstr_size) = 0;
while (chg_start < chg_length){
rh1 = in_str[chg_start];
chg_start = chg_start + 1;
if (rh1 >= 161 && rh1 <= 251 && chg_start < chg_length) {
rh2 = in_str[chg_start];
chg_start = chg_start + 1;
if (rh2 >= 64 && rh2 < 128 && chg_start <= chg_length ) {
pos_of_gb = (rh1 - 161) * 160 * 2 + (rh2 - 64) * 2;
out_str[(*outstr_size)++] = gb_str[pos_of_gb];
out_str[(*outstr_size)++] = gb_str[pos_of_gb+1];
}
else {
if ( chg_start <= chg_length ) {
if ( rh2 >= 160 ) {
pos_of_gb = (rh1 - 161) * 160 * 2 + (rh2 - 160) * 2 + 64 * 2;
out_str[(*outstr_size)++] = gb_str[pos_of_gb];
out_str[(*outstr_size)++] = gb_str[pos_of_gb+1];
}
else {
out_str[(*outstr_size)++] = rh1;
chg_start = chg_start - 1;
}
}
}
}
else
if ( rh1 < 161 || rh1 > 251 )
out_str[(*outstr_size)++] = rh1;
}
}
int GBToBig5(const TCHAR *szSrc0, XString &sDest, void *pCodeTable)
{
AString szSrc1(szSrc0);
const char* szSrc=(const char*)szSrc1;
unsigned nLen=(unsigned)strlen(szSrc);
unsigned nOut=0;
char *szDest=strnew(szSrc);
gb_2_big((unsigned char *)szSrc, nLen, (unsigned char *)szDest, &nOut, (unsigned char *)pCodeTable);
ASSERT(nOut==nLen);
sDest=(LPCTSTR)TString(szDest);
delete[] szDest;
return RTNORM;
}
int Big5ToGB(const TCHAR *szSrc0, XString &sDest, void *pCodeTable)
{
AString szSrc1(szSrc0);
const char* szSrc=(const char*)szSrc1;
unsigned nLen=(unsigned)strlen(szSrc);
unsigned nOut=0;
char *szDest=strnew(szSrc);
big_2_gb((unsigned char *)szSrc, nLen, (unsigned char *)szDest, &nOut, (unsigned char *)pCodeTable);
ASSERT(nOut==nLen);
sDest=(LPCTSTR)TString(szDest);
delete[] szDest;
return RTNORM;
}