PTR ptr(new st);
Это утечка памяти в C ++, потому что new st
выделяет память, и ее невозможно освободить.
UINT count = _ttoi(str);
...
sprintf_s(string, 10, "%04d", count);
Это преобразование строки в целое число, а затем преобразование целого числа обратно в строку. Кажется, у него нет настоящей цели.
Например, "1234"
преобразуется в 1234
и обратно в "1234"
. Но "A123"
не является допустимым числом, поэтому оно преобразуется в 0
, а затем в "0000"
. Так что этот метод не работает. Вы можете просто работать с оригинальной строкой.
Кажется, эта функция пытается уместить 2 целых числа в 1 байт. Это можно сделать до тех пор, пока каждое значение меньше 16
или 0xF
(я не знаю, для чего это нужно). Это можно исправить следующим образом:
void StrToByte2(const wchar_t* str, BYTE *dest)
{
int len = wcslen(str);
if(len != 4)
return; //handle error
char buf[4] = { 0 };
for(int i = 0; i < 4; ++i)
if(str[i] >= L'0' && str[i] <= L'9')
buf[i] = (BYTE)(str[i] - L'0');
dest[0] = (buf[0] << 4) + buf[1];
dest[1] = (buf[2] << 4) + buf[3];
}
CStringW Byte2_To_Str(BYTE *dest)
{
CStringW str;
str.AppendFormat(L"%X", 0xF & (dest[0] >> 4));
str.AppendFormat(L"%X", 0xF & (dest[0]));
str.AppendFormat(L"%X", 0xF & (dest[1] >> 4));
str.AppendFormat(L"%X", 0xF & (dest[1]));
return str;
}
int main()
{
BYTE dest[2] = { 0 };
StrToByte2(L"1234", dest);
OutputDebugStringW(Byte2_To_Str(dest));
OutputDebugStringW(L"\n");
return 0;
}
Если строка шестнадцатеричная, вы можете использовать sscanf
для преобразования каждой пары символов в байты.
В основном "1234"
изменяется на 12
34
"A123"
изменяется на A1
23
bool hexstring_to_bytes(const wchar_t* str, BYTE *dest, int dest_size = 2)
{
int len = wcslen(str);
if((len / 2) > dest_size)
{
//error
return false;
}
for(int i = 0; i < len / 2; i++)
{
int v;
if(swscanf_s(str + i * 2, L"%2x", &v) != 1)
break;
dest[i] = (unsigned char)v;
}
return true;
}
CStringW bytes_to_hexstring(const BYTE* bytes, int byte_size = 2)
{
CString str;
for(int i = 0; i < byte_size; i++)
str.AppendFormat(L"%02X ", bytes[i] & 0xFF);
return str;
}
int main()
{
CStringW str;
CStringW new_string;
BYTE dest[2] = { 0 };
str = L"1234";
hexstring_to_bytes(str, dest);
new_string = bytes_to_hexstring(dest);
OutputDebugString(new_string);
OutputDebugString(L"\n");
str = L"A123";
hexstring_to_bytes(str, dest);
new_string = bytes_to_hexstring(dest);
OutputDebugStringW(new_string);
OutputDebugStringW(L"\n");
return 0;
}