8位表示

时间:2018-04-04 15:46:55

标签: arduino binary zero-padding

我的问题是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;
}

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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   

答案 2 :(得分: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;
}