Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    10

    Byte e char O.o

    Ciao stavo provando a scrivere un programma che mostra il contenuto di un file in esadecimale e in caratteri

    int _tmain(int argc, _TCHAR* argv[])
    {
    HANDLE hFile;
    LPCWSTR fName = (LPCWSTR)argv[1];
    BYTE buff[16];
    DWORD dwBytesRead;

    _tprintf(L"Reading Content of %s:\r\n\r\n",fName);

    hFile = CreateFile(fName,GENERIC_READ,0,NULL,OPEN_EXISTING ,NULL,NULL);

    if(INVALID_HANDLE_VALUE == hFile)ExitProcess(0);

    while(ReadFile(hFile,buff,sizeof(buff),&dwBytesRea d,NULL) && dwBytesRead > 0)
    {
    for(int i=0;i<16;i++)
    {
    buff[i] == 0x00 ? _tprintf(L"00 ") :_tprintf(L"%x ",buff[i]);
    }

    _tprintf(L" ");

    for(int i=0;i<16;i++)
    {
    buff[i] >= 0x21 || buff[i] < 0x7F ? _tprintf(L"%c ",(char)buff[i]) : _tprintf(L". ");
    }

    _tprintf(L"\n");
    }

    CloseHandle(hFile);
    return 0;
    }

    Il problema è che l'espressione buff[i] >= 0x21 || buff[i] < 0x7F ? _tprintf(L"%c ",(char)buff[i]) : _tprintf(L". "); stampa lo stesso caratteri strani invece di quelli compresi tra 33 e 126 col risultato che la console bippa etc mi sapreste spiegare come mai??

    Grazie!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Linguaggio? Hai letto il Regolamento?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    10
    ciao non posso modificare il titolo perchè son passati 60 minuti.

    Il liguaggio è C++

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Se nn sbaglio BYTE sta per unsigned char, quindi valori oltre 127 non sono negativi.
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    10
    leggevo dati in + e ho corretto il codice

    int _tmain(int argc, _TCHAR* argv[])
    {
    HANDLE hFile;
    LPCWSTR fName = (LPCWSTR)argv[1];
    BYTE buff[16];
    DWORD dwBytesRead,size = 0;

    _tprintf(L"Reading Content of %s:\r\n\r\n",fName);

    hFile = CreateFile(fName,GENERIC_READ,0,NULL,OPEN_EXISTING ,NULL,NULL);

    if(INVALID_HANDLE_VALUE == hFile)ExitProcess(0);

    while(ReadFile(hFile,buff,sizeof(buff),&dwBytesRea d,NULL) && dwBytesRead > 0)
    {
    for(int i=0;i<dwBytesRead;i++)
    {
    buff[i] == 0x00 ? _tprintf(L"00 ") :_tprintf(L"%x ",buff[i]);
    }

    _tprintf(L" ");

    for(int i=0;i<dwBytesRead;i++)
    {
    buff[i] >= 0x21 || buff[i] < 0x7F ? _tprintf(L"%c ",(TCHAR)buff[i]) : _tprintf(L". ");
    }

    size += dwBytesRead;
    _tprintf(L"\n");
    }

    _tprintf(L"File size is: %d Bytes\n",size);

    CloseHandle(hFile);
    return 0;
    }

    pero non capisco perche buff[i] >= 0x21 || buff[i] < 0x7F ? _tprintf(L"%c ",(TCHAR)buff[i]) : _tprintf(L". "); non funziona.... sto imparando a programmare da solo un aiutino sarebbe gradito

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    10
    Se nn sbaglio BYTE sta per unsigned char, quindi valori oltre 127 non sono negativi.

    Traduzione? xD

  7. #7
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Credo debba usare && e nn usarei l'operatore ? : in quelo modo ma cn un assegnazione.

    codice:
    unsigned char car;
    
    car = buff[i] >= 0x21 && buff[i] < 0x7F ? buff[i] : '.';
    
    printf("%c",car);
    Per gli Spartani e Sparta usa spartan Il mio github

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    10
    Si grazie cosi stampa bene tutto

    buff[i] > 0x20 && buff[i] < 0x7F ? _tprintf(L"%c ",buff[i]) : _tprintf(L". ");

    mi devo studiare meglio gli operatori logici perche non ho capito bene come mai con || non funge :O

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.