Входной параметр из командной строки как HEX с N-байтами

0

Этот код работает, если количество байт равно 1, только я хотел бы печатать, какие пользовательские вставки из командной строки и количество байтов может быть изменено позже

#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

void writeToScreen(char *data);
const int NOBYTES = 2;
int main(int argc, char *argv[]){
    // Example input is: FFA6 (2 Bytes)
    writeToScreen(argv[1]);
    system("pause");
    return 0;
}

void writeToScreen(char *data){
    for(int j=0;j<NOBYTES;j++){
    unsigned char dat = strtol(data+NOBYTES-j-1, NULL, 16);
    for (unsigned int i=0;i<8;i++)
    {
        if (dat & 1) 
            cout<<"1";
        else
            cout<<"0";
        dat>>=1;
    }
    cout<<endl;
    }
}

/*
    Can i get the out put to be (FFA6):
    11111111
    10100110
*/
Теги:

3 ответа

0

Я не понимаю, что вы пытаетесь в точности, но если вы хотите напечатать двоичное значение символа (или последовательность символов), вы можете попробовать следующее:

void to_binary(const char *const p, std::size_t bytes)
{
    for (std::size_t byte = 0; byte < bytes; ++byte)
    {
        std::cout << "byte" << byte << ": " ;

        for (std::uint8_t bit = 1; bit; bit <<= 1)
        {
            std::cout << ((p[byte] & bit) ? 1 : 0);
        }

        std::cout << '\n';
    }
}

Вот, например, живой пример.

Дополнительные советы writeToScreen должен принимать указатель как const, он показывает намерение только считывать переданное значение.

0

Добавить длину в качестве параметра

void writeToScreen(char *data, size_t dataLength);

используйте dataLength вместо NOBYTES внутри функции и вызовите ее

writeToScreen(argv[1], strlen(argv[1]));
  • 0
    я попробовал этот метод, если я введу: FF00, он напечатает 11110000, 11111111
0

Может быть, не лучшее решение, но должно сделать трюк

#include <string>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <bitset>

...

streamstream ss(data);
string temp;
temp.resize(2);
for (;;)
{
    char temp[2];
    if (! (ss >> temp[0])) break;
    if (! (ss >> temp[1])) break;

    stringstream ss2(temp);
    unsigned int value;
    ss2 >> hex >> value;
    cout << bitset<8>(value) << endl;
}
  • 0
    Могу ли я сделать цикл, который будет обрабатывать размер байтов? как глобальная константа ??
  • 0
    @ user2768374 Будет работать количество байтов от размера строки данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню