バイナリ コンバーターを作成することにしました。コードは小さくてシンプルで、整数を取り、結果のバイナリ文字列で char* を出力することになっています。
ここでの問題は、最後の sprintf が常に最後に付加された文字を 2 倍にしているように見えることです。
たとえば、答えが 1001001 である場合は 11001001 と出力され、-10 であると想定される場合は --10 と出力されます。
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
void bin_string( char** buffer ,int num ){
bool neg = false;
if ( num < 0 ){
neg = true;
num = ~num+1;
}
if( num == 0 )
sprintf( *buffer, "%d", 0 );
while( num > 0 ){
int rem = num%2;
sprintf( *buffer, "%d%s", rem, *buffer );
printf("iteration: %s rem: %d\n", *buffer, rem );
num = num/2;
}
if( neg )
sprintf( *buffer, "-%s", *buffer );
}
int main( int argc, char** argv ){
char* a = malloc( sizeof(char)*64 );
bin_string( &a, 73 );
printf("Result %s\n",a ); /* output is 11001001 but should be 1001001*/
return 0;
}