在 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 毫秒对我来说可以忽略不计。
我很难尝试将 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 毫秒对我来说可以忽略不计。