文字列 バイナリ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Cユーザー

文字列 バイナリ

#1

投稿記事 by Cユーザー » 13年前

char buf[1024];

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

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 文字列 バイナリ

#2

投稿記事 by みけCAT » 13年前

バイナリにして格納とはどういうことでしょうか?

コード:

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;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列 バイナリ

#3

投稿記事 by softya(ソフト屋) » 13年前

Cユーザーさんが理解しているテキストとバイナリの違いって何でしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

box
記事: 2002
登録日時: 15年前

Re: 文字列 バイナリ

#4

投稿記事 by box » 13年前

Cユーザー さんが書きました: このbufに"test"などの文字列を
バイナリにして格納したいのですが
入力データが"test"の場合の、想定している格納結果は何でしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Cユーザー

Re: 文字列 バイナリ

#5

投稿記事 by Cユーザー » 13年前

文字だけのデータ:テキスト
それ以外:バイナリ

という認識ですね

>みけCAT様

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

Cユーザー

Re: 文字列 バイナリ

#6

投稿記事 by Cユーザー » 13年前

バイナリに変換された数値が格納されているイメージです

box
記事: 2002
登録日時: 15年前

Re: 文字列 バイナリ

#7

投稿記事 by box » 13年前

Cユーザー さんが書きました:バイナリに変換された数値が格納されているイメージです
私の理解度が低く、どういう結果をお望みなのかよくわかっていません。
入力データが"test"の場合、bufの各要素(buf[0], buf[1], buf[2]など)に
どういう値が入ればいいのか示していただけますか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列 バイナリ

#8

投稿記事 by softya(ソフト屋) » 13年前

文字1つ1つが数値コードを持っています。
テキストファイルをバイナリエディタで開いてみると分かると思いますが開いて見た事はありますか?
テキストファイルをバイナリエディタで見た上でCユーザー さんが目指すものを説明してもらえますでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Cユーザー

Re: 文字列 バイナリ

#9

投稿記事 by Cユーザー » 13年前

どういう格納になるのかわかってないのですが

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

54 45 53 54

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列 バイナリ

#10

投稿記事 by softya(ソフト屋) » 13年前

16進数で54=T 45=E 53=S 54=T です。
[修正]これがテキストファイルや文字列データなのですが、Cユーザーさんが目指すバイナリとはTESTがどういう形式で格納されているべきものなのでしょうか?
そこを知っているのはCユーザーさんだけだと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 文字列 バイナリ

#11

投稿記事 by beatle » 13年前

テキストデータ、バイナリデータと言いますが、実はコンピュータ上の全てのデータはバイナリデータなんですよ。

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です。

box
記事: 2002
登録日時: 15年前

Re: 文字列 バイナリ

#12

投稿記事 by box » 13年前

単にこれだけのことでしたね。

コード:

#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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Cユーザー

Re: 文字列 バイナリ

#13

投稿記事 by Cユーザー » 13年前

皆様すいません

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

閉鎖

“C言語何でも質問掲示板” へ戻る