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
*/
4

3 回答 3

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;
}
于 2013-10-09T14:03:29.660 回答
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,它表明只读取传递的值的意图。

于 2013-10-09T14:28:39.803 回答
0

添加长度作为参数

void writeToScreen(char *data, size_t dataLength);

在函数内部使用dataLength而不是NOBYTES,并调用它

writeToScreen(argv[1], strlen(argv[1]));
于 2013-10-09T14:08:18.510 回答