質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

Q&A

解決済

2回答

10630閲覧

バイナリファイルの中身を16進数で取得したい

aglaia

総合スコア14

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

0グッド

1クリップ

投稿2017/08/17 05:12

###環境
windows 10 64bit
visual studio 2017
C言語
初心者(学生)です

###バイナリファイルの中身を16進数で取得したいです
1、バイナリファイルの中身の"62"とか"2A"とかをそのまま、変数に入れます。
2、その変数を適当なアルゴリズムに従って書き換えていきます
3、バイナリファイルに順番に変数を上書きしていきます
4、暗号化完了!
ということをしたいです。

バイナリファイルを文字として受け取るのではなく、16進数として変数に入れる関数はあるのでしょうか?
また、その変数は特別な型なのでしょうか?
ネットで10分程度漁ってもC言語でしているものはなかなか見つからなかったです。

あと、もしよければ暗号化のアルゴリズムを体系的に解説しているサイトはありませんか?

宜しくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

16進数は表記方法であってデータ型ではないです。10進数の 10 を 16 進数表記した物が 0A であり、16進数の FF を10進数表記した物が 255 です。表記の方法が異なるというだけであって保持されている値は同じなのです。

言語によってはユーティリティとして hex 型の様な物があるかもしれませんが、それは単に値へのアクセス方法や表示方法が 16 進表記というだけであり、中で保持される値はプリミティブな型です。

この辺を理解頂いた後、ご自分の質問を再度読み直して頂くと何が間違っているのか分かると思います。

投稿2017/08/17 05:23

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aglaia

2017/08/17 07:47

ありがとうございます 俺の質問は見当違いだったのですね ありがとうございます int型で読み込めば、10進数で表記され、char型で読み込めば、文字列として表記されるだけなんですね BZのようなバイナリエディタというのは、16進数で表記しているだけということなんですね では、2進数として処理するにはどうすればよいのでしょうか?
mattn

2017/08/17 07:58

2進数も同じです。2進数の場合はビットで値を取ればいいので #include <stdio.h> int main(int argc, char* argv[]) { int i; int v = 12; // 1100 for (i = 7; i >= 0; i--) printf("%d", (v >> i) & 1); printf("\n"); return 0; } こんなコードで数値から2進数表記を得られます。
aglaia

2017/08/17 08:16

素早い返信ありがとうございます 上手くいきました ありがとうございます。
guest

0

バイナリファイルを文字として受け取るのではなく、16進数として変数に入れる

C言語の場合、char整数型なので、そのまま取り出すだけで数値になります。

なお、Windowsの場合、バイナリモードでファイルを読み書きしないと改行コードが崩れてしまいます。

投稿2017/08/17 05:23

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aglaia

2017/08/17 07:44

回答ありがとうございます。 charが整数型とはどういうことでしょうか?
maisumakun

2017/08/17 07:51

charは文字を入れることによく使われますが、中身は(符号付きなら、たとえば-128~+127まで入るような)「1バイトの数値」です。
aglaia

2017/08/17 08:14

素早い返信ありがとうございます 疑問は解決しました 本当にありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問