私は任意のバッファをバイナリ表現の文字列に変換しようとしています。私はここからいくつかのコードを見ていた:http://snippets.dzone.com/posts/show/2076を開始するには。私はこのコードは任意のバッファを変換することはできませんが、intの特定の場合のみ変換することを認識しています。しかし、私は一度それが働いていればどのケースにも適応できると考えました。バッファをC++のバイナリ文字列に変換するにはどうすればよいですか?
問題は、それが(このように:왿」)いくつかの奇妙なシンボルを返すことである。代わりに、バイナリのいずれかのどちらかが、特にこのコードで間違っているものを知っているか、任意のバッファを変換する方法について説明してい
?私は、C++に新しいですのでご注意ください。
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
char *getBufferAsBinaryString(void *in)
{
int pos=0;
char result;
char bitstring[256];
memset(bitstring, 0, 256);
unsigned int *input= (unsigned int *)in;
for(int i=31;i>=0;i--)
{
if (((*input >> i) & 1)) result = '1';
else result = '0';
bitstring[pos] = result;
if ((i>0) && ((i)%4)==0)
{
pos++;
bitstring[pos] = ' ';
}
pos++;
}
return bitstring;
}
int main(int argc, char* argv[])
{
int i=53003;
char buffer[1024];
char *s=getBufferAsBinaryString(&i);
strcpy(buffer, s);
printf("%s\n", buffer);
}
戻り、スタック割り当てバッファへのポインタを使用しているため、このプログラムの動作は未定義です。あなたはコンピュータが魔法のようにワトログに変身していないことを喜んで喜ぶべきです。これはC++ではなくCでもあります。 –
とりわけ、 'getBufferAsBinaryString'は、ローカルへのポインタを返すので、未定義の動作をします。 –
バッファ 'char buf [N];があれば' std :: string s(buf、buf + N); 'で文字列を作ることができます。 –