1

我正在尝试从 16 位二进制字符串中提取 4 位,即从一个单词中剔除 谁能告诉我这个程序有什么问题?

#include <sstream>
#include <iomanip>
#include <math.h>
#include<iostream>

using namespace std;

int main()
{
    std::string aBinaryIPAddress = "1100110011001100";

    std::string digit0 = aBinaryIPAddress & 0x0f;
    cout << "digit0 : " << digit0 << endl;

    std::string digit1 = (aBinaryIPAddress >>  4) 0x0f;
    cout << "digit1 : " << digit1 << endl;

    std::string digit2 = (aBinaryIPAddress >>  8) 0x0f;
    cout << "digit2 : " << digit2 << endl;

    std::string digit3 = (aBinaryIPAddress >> 12) 0x0f;
    cout << "digit3 : " << digit3 << endl;

    return 0;
}

我收到以下错误:

 changes.cpp: In function `int main()':
 changes.cpp:117: error: invalid operands of types `char*' and `int' to binary `
 operator>>'
 changes.cpp:117: error: parse error before numeric constant
4

5 回答 5

2

如果您正在操作 a string,则应该使用substr,而不是“移位和掩码”技术:&并且>>运算符对于字符串和ints 是未定义的。

以下是如何做到这一点substr

#include <iostream>
#include <string>
using namespace std;

int main() {
    string aBinaryIPAddress = "0101100111101101";
    size_t len = aBinaryIPAddress.size();
    for (int i = 0 ; i != 4 ; i++) {
        cout << "Digit " << i << ": " << aBinaryIPAddress.substr(len-4*(i+1), 4) << endl;
    }
    return 0;
}

这打印

Digit 0: 1101
Digit 1: 1110
Digit 2: 1001
Digit 3: 0101

ideone 上的演示。

如果您需要四个单独的变量,请“展开”循环,如下所示:

string d0 = aBinaryIPAddress.substr(len-4, 4);
string d1 = aBinaryIPAddress.substr(len-8, 4);
string d2 = aBinaryIPAddress.substr(len-12, 4);
string d3 = aBinaryIPAddress.substr(len-16, 4);
于 2013-11-05T14:20:40.607 回答
0

您有一个std::string包含 16 个字符的对象,每个字符的值都是'0'or '1'。如果您想查看从那里获取的“nibbles”,只需拉出您需要的 4 个字符组:

std::string digit0 = aBinaryIPAddress.substr(12,4);
std::cout << digit0 << '\n';

那只是文本操作;如果您想获取值,将字符转换digit0为数值很简单(也是一个有用的练习)。

于 2013-11-05T14:16:27.760 回答
0

您不能按照您的方式从整数转换为字符串。您可以使用字符串流:

#include <iomanip>
......
std::string convert_int_to_hex_stiring(int val) {
  std::stringstream ss;
  ss << std::hex << val;
  return val;
}

在使用上述函数之前,您必须从部分输入字符串中读取整数。问题是未在字符串上定义按位运算。

于 2013-11-05T14:12:49.520 回答
0

aBinaryIPAddress 的类型应该是数字而不是字符串

就像是

unsigned int aBinaryIPAddress = 0b1100110011001100;

应该管用

于 2013-11-05T14:13:28.183 回答
-1

很明显,问题出在这样的陈述中

std::string digit0 = aBinaryIPAddress & 0x0f;

你明白 std::string 不是数字吗?!

于 2013-11-05T14:14:06.410 回答