2015-01-13 10 views
-1

использовать функцию ReadFile(), чтобы получить несколько байт из упреждающей файлаФорматирование байтов массива

BYTE ReadBuffer[24]; 

for(i=0; i < 24; (i++)) 
{ 
    printf("%02X", *(ReadBuffer+i)); 
} 

, если я использую% 02X я получить такой же результат, как мой редактор шестнадцатеричных:

43 00 4F 00 4E 00 48 00 4F 00 53 00 54 00 2E 00 45 00 58 00 45 00 00 00 

если Я использую% C:

C O N H O S T . E X E 

это, кажется, UTF-16LE и я хочу, как результат conhost.exe (без пробелов ...) с помощью WI NAPI только

я пытаюсь использовать WideCharToMultiByte, но он не работает ..

CHAR AnsiPath[MAX_PATH] 
WideCharToMultiByte(CP_ACP, 0, (PWCHAR)Buffer, -1, AnsiPath, sizeof(AnsiPath), NULL, NULL) 

кто-то может объяснить мне, где я не в состоянии? благодаря

здесь полный код

int main(void) 
{ 
    HANDLE hFile; 
    DWORD dwBytesRead = 0; 
    BYTE ReadBuffer[10266]; 
    DWORD nNumberOfBytesToRead = 10266; 

    LPCWSTR fname = L"C:\\Windows\\Prefetch\\CONHOST.EXE-3218E401.pf"; 
    hFile = CreateFile(fname,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); 


    if (!ReadFile(hFile, ReadBuffer, nNumberOfBytesToRead, &dwBytesRead, NULL)) 
    { 
      printf("Terminal failure: Unable to read from file.\n GetLastError=%08x\n", GetLastError()); 
      CloseHandle(hFile); 
    } 
    printf("Data read from %s (%d bytes): \n", fname, dwBytesRead); 
    wprintf(L"%ld\n", ReadBuffer); 
    int i; 
    for(i=16; i < 40; i++) 
    { 
     printf("%C ", *(ReadBuffer+i)); 
    } 
    char AnsiPath[MAX_PATH]; 
    int result = WideCharToMultiByte(CP_UTF8, 0, (PWCHAR)ReadBuffer, -1, AnsiPath, 0,0,0); 
    printf("\nResult WideCharToMultiByte : %d\n", result); 

    printf("\nString : %s \n",AnsiPath); 
    CloseHandle(hFile); 
    system("pause"); 
    return 0; 
} 

результат:

Data read from C (9068 bytes): 
3199640 
C O N H O S T . E X E 
Result WideCharToMultiByte : 2 

String : ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ 
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ 
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ 
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠(
Appuyez sur une touche pour continuer... 
+1

«Это не работает». Могу вас заверить, что «WideCharToMultiByte» отлично работает. Ваш код не работает. Опишите, как это происходит. Я также отмечаю, что вы не можете проверить возвращаемое значение 'WideCharToMultiByte'. Это всегда ошибка. –

+0

вы правы, я забыл сказать, что WideCharToMultiByte вернет мне 2 .. я думаю, что это неправильный размер – Occulta

+1

Что делает этот актер? Вам нужно сделать это следующим образом: '(PWCHAR) & ReadBuffer'? Я не знаю, что такое «Буфер». Он появляется только при вызове 'WideCharToMultiByte'. Если бы вы предоставили полную программу, нам не пришлось бы проходить этот болезненный процесс. –

ответ

0

О новом коде вы публикуемую:

Выглядит как начало строки на 16-й байт ReadBuffer , поэтому вам нужно конвертировать из этого, используя ReadBuffer+16 или что угодно.

Вы забыли sizeof(AnsiPath), как в строках, которые вы разместили чуть выше.

+0

omg 2 дня, что я ищу .. он работает .. Я использовал FULL ReadBuffer, а не байты 16-40 ...:/Спасибо вам !! :) – Occulta

Смежные вопросы