-1

我的问题将是 Arduino 特定的,我编写了一个将字符数组(文本)转换为二进制字符串的代码,但问题是二进制表示不是 8 位,它有时是 7 位、6 位甚至 1 位表示(如果您的十进制值为 1)。我正在使用 String 构造函数String(letter, BIN)将字母的二进制表示形式存储在字符串中。

我想要一个 8 位表示甚至 7 位表示。

String text = "meet me in university";
String inbits;
byte after;
byte bits[8];
byte x;
char changed_char;
void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Press anything to begin");
  inbits = convertToBits(text);
}

String convertToBits(String plaintext)
{
  String total,temp;
  total = String(plaintext[0],BIN);
  total = String(total + " ");
  for (int i=1;i<plaintext.length();i++)
  {
    temp = String (plaintext[i],BIN);
    total = String(total + temp);
    total = String(total + " ");
  }
  Serial.println(total);
  return total;
}
4

3 回答 3

1

您可以执行类似于以下的操作:

void PrintBinary(const std::string& test)
{
    for (int c = 0; c < test.length(); c++)
    {
        unsigned bits = (unsigned)test[c];
        for (int i = 0; i < 8; i++)
        {
            std::cout << ((bits >> (7 - i)) & 1U);
        }
        std::cout << " ";
    }
}

修改上面的示例以使用 String 和 Serial.println 而不是 std::string 和 std::cout 应该是微不足道的。我没有要测试的 arduino,所以我无法修改您的代码并测试上述内容在您工作的环境中是否可行,但我认为是。

PrintBinary("Hello"); //Output: 01001000 01100101 01101100 01101100 01101111   
于 2018-04-04T16:16:21.980 回答
1

如果参数字符串的长度小于 8,则在前面加上“0”,直到它长 8 位。

于 2018-04-04T15:51:09.013 回答
0

String(letter, BIN)不对字符串进行零填充。你必须自己做。

您需要添加0字符,直到您的二进制字符串长度为 8 个字符。

String convertToBits(String plaintext)
{
  String total, temp;
  total = "";
  for (int i=0; i<plaintext.length(); i++)
  {
    temp = String (plaintext[i], BIN);
    while (temp.length() < 8)
        temp = '0' + temp;
    if (i > 0)
        total = String(total + " ");
    total = String(total + temp);
  }
  Serial.println(total);
  return total;
}
于 2018-04-04T16:18:46.480 回答