在 C / Arduino 中将整数转换为二进制

Converting int to binary in C / Arduino

我很难尝试将 INT 转换为 8 位二进制数。

有很多关于如何在线执行此操作的代码,但是大多数代码都需要库才能工作,而 Arduino 不支持来自 C 的库,因为它有自己的库。

如果有人知道如何在不使用 C 库的情况下执行此操作,也许只是使用一些循环,我们将不胜感激

例如:

如果输入是5 输出应该是 00000101

谢谢

您可以使用按位打印整数的二进制值。

就我而言,我正在使用这种函数来了解它是如何工作的:

int     main()
{
  int   nb = 10;
  int   i = 31;

  while (i >= 0) {
    if ((nb >> i) & 1)
      printf("1");
    else
      printf("0");
    --i;
  }
  printf("\n");
}

在此代码中,i 表示 selected 位。对于这个 selected 位,我正在使用逻辑 AND (&) 运算符搜索它是否为 1。如果是,我打印“1”并 select 下一位直到数字的末尾(包含 32 位,因为它是一个整数)。

有很多方法可以使用按位获取值。您必须自己尝试才能更好地理解!

祝你好运!

这是一个获取数字的特定位的宏:

#define BIT(n,i) (n>>i&1)

用法如下:

BIT(10,0) //Gets bit 0 of int 10.

Integer converted to an Array containing the Binary equivalent.

I wrote this for my personal use because I didn't want to use a library.

Some examples:

If testInterger is 255 then Output is 11111111.

If testInterger is a 0 then Output is 00000000.

If testInterger is 127 then Output is 01111111.

If testInterger is 100 then Output is 01100100.

char newArray[8]="00000000"; // Make an Array to hold the 8 Bits.
int arrayPosition=0;         // Keep track of the position of each Bit.
int testInteger=100;         // Any number from 0-255.

void setup(){
  Serial.begin(9600);

  for(int a=128; a>=1; a=a/2){      // This loop will start at 128, then 64, then 32, etc.
    if((testInteger-a)>=0){         // This checks if the Int is big enough for the Bit to be a '1'
      newArray[arrayPosition]='1';  // Assigns a '1' into that Array position.
      testInteger-=a;}              // Subracts from the Int.
    else{
      newArray[arrayPosition]='0';} // The Int was not big enough, therefore the Bit is a '0'
      arrayPosition++;                // Move one Character to the right in the Array.
    }

  Serial.println(newArray);

// OR if you want to print it one character at a time with spaces between
//    just to see that it is an Array...
//      for(int a=0; a<=7; a++){
//        Serial.print(newArray[a]);
//        Serial.print(" ");
//      }

}

void loop(){  
}

我不知道你的时间限制是什么,但这需要 0.016 毫秒到 运行。或 16 微秒。

我用它从 W25QXX 8-Meg 串行闪存 IC 流式传输 Voice/Music/SoundFx 数据,用于我构建的游戏。 8 Megs 允许使用 8000hz 样本超过 16 分钟的声音。所以 .016 毫秒对我来说可以忽略不计。