能力值:
( LV8,RANK:122 )
|
-
-
2 楼
你用无符号Char好点吧
这个好像不能对汉字处理吧
|
能力值:
( LV3,RANK:30 )
|
-
-
3 楼
汉字确实麻烦...
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
下面的代码只可以处理ascii或unicode 西文字符
摘自PEInfo模拟版V0.03
我是这样处理的:
int j=0;
byte *pTempByte = pByte;
while( !( *pTempByte==NULL && *(pTempByte+1)==NULL ) )
{
pTempByte++;
}
j = pTempByte - pByte;
if( j==0 )//二进制
{
SetRelcationSectionItemDetailData(i,pByte);
}
else
{
if( j%2==1 )//为UNICODE凑为字节双数
j++;
if( IsTextUnicode(pByte,j,NULL) )
{
UINT strSize = wcslen((LPWSTR)pByte);
LPSTR pAnsiStr = UnicodeToAnsi((LPWSTR)pByte);
if( pAnsiStr )
{
if( ByteIsCanView((wchar_t *)pByte) )
{
if( ByteIsCanView((byte *)pAnsiStr) )//首字节在此范围内才显示ascii(只支持西文)
{
s.Format("%s (Unicode string) %dbytes",pAnsiStr,strSize*2);
pRelcationSectionItemList->SetItemText(i,5,s);
TRACE("%s\n",s);
delete pAnsiStr;
}
}
else
{
SetRelcationSectionItemDetailData(i,pByte);
}
}
else
{
SetRelcationSectionItemDetailData(i,pByte);
}
}
else
{
if( ByteIsCanView(pByte) )//首字节在此范围内才显示ascii(只支持西文)
{
s.Format("%s (string) %dbytes",pByte,strlen((char*)pByte));
pRelcationSectionItemList->SetItemText(i,5,s);
TRACE("%s\n",s);
}
else
{
SetRelcationSectionItemDetailData(i,pByte);
}
}
}
LPSTR UnicodeToAnsi(LPWSTR lpszWideStr)
{
BOOL bUsed;
LPSTR lpAnsiStr;
if (lpszWideStr)
{
int len = WideCharToMultiByte(CP_ACP, 0, lpszWideStr, -1, NULL, 0,NULL, &bUsed);
if (len == 0)
return NULL;
lpAnsiStr = new char[len + 1];
if (lpAnsiStr == NULL)
return NULL;
if (WideCharToMultiByte(CP_ACP, 0, lpszWideStr, -1, lpAnsiStr, len,NULL, &bUsed))
return lpAnsiStr;
}
return NULL;
}
template<class T>
bool ByteIsCanView(T *pStr)
{
if( *pStr==0 )
return false;
while(*pStr)
{
if( !((*pStr>=T(0x20)) && (*pStr<=T(0x7E))) )
return false;
pStr++;
}
return true;
}
void CPE_Relocation::SetRelcationSectionItemDetailData(int index,byte *pByte)
{
CString str;
str.Format("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X",
*pByte,*(pByte+1),*(pByte+2),*(pByte+3),*(pByte+4),*(pByte+5),
*(pByte+6),*(pByte+7),*(pByte+8),*(pByte+9));
pRelcationSectionItemList->SetItemText(index,5,str);
//CListCtrl
}
以下是PEInfo模拟版重定位表字符显示示例
LordPE v1.4只显示10个字符(ascii or unicode)
|