ページ 11

文字列 バイナリ

Posted: 2013年3月25日(月) 12:34
by Cユーザー
char buf[1024];

このbufに"test"などの文字列を
バイナリにして格納したいのですが
どのように実現できるでしょうか?

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 12:39
by みけCAT
バイナリにして格納とはどういうことでしょうか?

コード:

strcpy(buf,"test");
ではだめなのでしょうか?

バイナリ=2進数なので、こうでしょうか?

コード:

#include <stdio.h>

void str2binary(char* out,const char* in) {
	int i;
	while(*in) {
		for(i=7;i>=0;i--) {
			*(out++)=(((*in)>>i)&1)+'0';
		}
		in++;
	}
	*out=0;
}

int main(void) {
	char buf[1024];
	str2binary(buf,"test");
	puts(buf);
	return 0;
}

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 12:59
by softya(ソフト屋)
Cユーザーさんが理解しているテキストとバイナリの違いって何でしょうか?

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 13:04
by box
Cユーザー さんが書きました: このbufに"test"などの文字列を
バイナリにして格納したいのですが
入力データが"test"の場合の、想定している格納結果は何でしょうか。

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 13:09
by Cユーザー
文字だけのデータ:テキスト
それ以外:バイナリ

という認識ですね

>みけCAT様

ご教授ありがとうございました

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 13:14
by Cユーザー
バイナリに変換された数値が格納されているイメージです

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 13:45
by box
Cユーザー さんが書きました:バイナリに変換された数値が格納されているイメージです
私の理解度が低く、どういう結果をお望みなのかよくわかっていません。
入力データが"test"の場合、bufの各要素(buf[0], buf[1], buf[2]など)に
どういう値が入ればいいのか示していただけますか?

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 13:45
by softya(ソフト屋)
文字1つ1つが数値コードを持っています。
テキストファイルをバイナリエディタで開いてみると分かると思いますが開いて見た事はありますか?
テキストファイルをバイナリエディタで見た上でCユーザー さんが目指すものを説明してもらえますでしょう。

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 15:08
by Cユーザー
どういう格納になるのかわかってないのですが

テキストファイルにTESTと書いてバイナリで開くと

54 45 53 54

となってたのでこの数値が入ってるイメージっす

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 15:46
by softya(ソフト屋)
16進数で54=T 45=E 53=S 54=T です。
[修正]これがテキストファイルや文字列データなのですが、Cユーザーさんが目指すバイナリとはTESTがどういう形式で格納されているべきものなのでしょうか?
そこを知っているのはCユーザーさんだけだと思います。

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 16:05
by beatle
テキストデータ、バイナリデータと言いますが、実はコンピュータ上の全てのデータはバイナリデータなんですよ。

54 45 53 54
という32ビットのバイナリデータを、ASCII文字コードで表現された文字列だと「思い込んで」解釈すると"TEST"となるわけです。
しかし、もしかしたら54 45 53 54は音楽データかもしれない。画像の1ピクセルかもしれない。

ということで、テキストデータはバイナリデータの一種類なのです。
だから回答者側としては、Cユーザーさんが「"test"などの文字列をバイナリにして格納したい」と仰っている真意が掴めないんです。
だって、"test"はそもそもバイナリデータですから。

ちなみに、
buf[0] = 0x54, buf[1] = 0x45, buf[2] = 0x53, buf[3] = 0x54
という結果が欲しいなら、みけCATさんが回答しているように、
strcpy(buf, "TEST");
でOKです。

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 16:31
by box
単にこれだけのことでしたね。

コード:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char buf[1024];
    int i;
    
    strcpy(buf, "TEST");

    for (i = 0; i < strlen(buf); i++) {
        printf("%c  ", buf[i]);
    }
    putchar('\n');
    
    for (i = 0; i < strlen(buf); i++) {
        printf("%x ", buf[i]);
    }
    putchar('\n');
    return 0;
}

Re: 文字列 バイナリ

Posted: 2013年3月25日(月) 16:43
by Cユーザー
皆様すいません

理解せず質問していたようです
皆様からの回答を参考に答えをだしたいと思います
丁寧な解説、サンプルをありがとうございました。