Yesterday during lunch break I thought about building a binary clock with an ESP32. Since I don’t have a corresponding development environment on my device, I quickly prescribed the function for converting the time into a binary string in Powershell. The next step then is to convert this code into a C function.
The simplest variant is:
[Convert]::ToString (64,2)
However, this logic would not run on an ESP32. Therefore a function that can be easily converted to C later has to be found.
function Convert-ToBinaryString
{
param(
[Parameter(Mandatory=$true)]
[int]$start,
[Parameter(Mandatory=$true)]
[int]$value
)
$binary = "";
while($start -gt 0)
{
if($value / $start -ge 1)
{
$binary += "1";
$value = $value - $start;
}
else
{
$binary += "0";
}
$start = $start -shr 1;
}
return $binary;
}A quick example to check that the function works.
# example Convert-ToBinaryString -start 32 -value 22 "--" Convert-ToBinaryString -start 32 -value 45
Output
010110
—
101101
Now the C/C++-Code
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
string ConvertToBinaryString(int start, int value)
{
string binary = "";
while (start > 0)
{
if (value != 0)
{
if (value / start >= 1)
{
binary += "1";
value = value - start;
}
else
{
binary += "0";
}
}
else if (value == 0)
{
binary += "0";
}
start = start >> 1;
}
return binary;
}
int main()
{
string test = ConvertToBinaryString(16, 8);
cout << test;
getchar();
return 0;
}