Этот код работает, если количество байт равно 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
*/
Я не понимаю, что вы пытаетесь в точности, но если вы хотите напечатать двоичное значение символа (или последовательность символов), вы можете попробовать следующее:
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, он показывает намерение только считывать переданное значение.
Добавить длину в качестве параметра
void writeToScreen(char *data, size_t dataLength);
используйте dataLength
вместо NOBYTES
внутри функции и вызовите ее
writeToScreen(argv[1], strlen(argv[1]));
Может быть, не лучшее решение, но должно сделать трюк
#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;
}