Я использую некоторые кроссплатформенные вещи, называемые «Щелкунчик», для перехода между Windows и Linux, чтобы вкратце сказать, что он ограничен в поддержке широких строковых символов.Я должен взять код ниже и заменить то, что делает swprintf, и я понятия не имею, как.Мой опыт с манипуляцией байтами низкого уровня - отстой.Может кто-нибудь, пожалуйста, помогите мне с этим?
Пожалуйста, имейте в виду, что я не могу сойти с ума и переписать swprintf, но получить базовую функциональность для правильного форматирования pwszString из данных в pBuffer.Это c ++ с использованием компилятора Microsoft vc6.0, но через CXX, поэтому он также ограничен.
wszSep - это просто разделитель, "" или "-" для читабельности при печати.
HRESULT BufferHelper::Buff2StrASCII(
/*[in]*/ const unsigned char * pBuffer,
/*[in]*/ int iSize,
/*[in]*/ LPWSTR wszSep,
/*[out]*/ LPWSTR* pwszString )
{
// Check args
if (! pwszString) return E_POINTER;
// Allocate memory
int iSep = (int)wcslen(wszSep);
*pwszString = new WCHAR [ (((iSize * ( 2 + iSep )) + 1 ) - iSep ) ];
if (! pwszString) return E_OUTOFMEMORY;
// Loop
int i = 0;
for (i=0; i< iSize; i++)
{
swprintf( (*pwszString)+(i*(2+iSep)), L"%02X%s", pBuffer[i], (i!=(iSize-1)) ? wszSep : L"" );
}
return S_OK;
}
Это берет то, что находится в pBuffer и кодирует широкий буфер с помощью ascii.Я использую typedef const unsigned short * LPCWSTR;потому что этот тип не существует в щелкунчике.
Я могу опубликовать больше, если вам нужно больше кода.
Спасибо.