

お世話になります。
今、
char buf[1500]に値が入っているのですが、
バイナリデータであり、テキストエディタで
バイナリモードでみると、
54,00,00,32,00,00,40,00,FF・・・
となっています。
この3~4バイト目の0x00,0x32のを
10進数にした値を得たいです。
今回の質問点を下記します。
(1)bufに格納されている3・4バイト目の値を得るにはどうしたら
いいのでしょうか?memcpy()などでやるのか?
(2)得た値を10進にするにはどうしたらいいでしょうか?
どうぞよろしくお願い致します。
No.4ベストアンサー
- 回答日時:
>char buf={0x54, 0x00, 0x05, 0xDC};
>の場合、
>16進数:5DCを10進数1500を
>int型の変数に入れる場合は、どうしたらいいでしょうか?
サンプルです。
#include <stdio.h>
int main(void)
{
char buf[1500] = { 0x54, 0x00, 0x05, 0xDC, /* 以下省略 */ };
int m, n;
m = (unsigned char) buf[2];
n = (unsigned char) buf[3];
m = (m << 8) + n;
printf("%d\n", m);
return 0;
}
(注)インデントのため、全角空白を使っています。
No.5
- 回答日時:
char型は、-128~127までの値を取る型なので、-36は正しいです。
不の値が不要であれば、unsigned指定をして下さい。
試しに、共用体で一発で取り出せないか試してみました。
#include <stdio.h>
int main(void)
{
union {
char buf_c[4];
short buf_s[2];
}data;
data.buf_c[0] = 0x54;
data.buf_c[1] = 0x00;
data.buf_c[2] = 0x05;
data.buf_c[3] = 0xDC;
printf("%d\n",data.buf_s[1]);
return 0;
}
結果は、「-9211」。
どうやら、0xDC05になってしまった模様。
環境は、Windows2000pro、コンパイラはBorlandC++builder5です。
なので、質問の値を取り出す方法としては、
#include <stdio.h>
int main(void)
{
char buf[1500] = { 0x54, 0x00, 0x05, 0xDC, 0x00, /* 以下省略 */ };
unsigned short m;
m = (unsigned short)buf[2] << 8 | (unsigned short)buf[3] & 0xFF;
printf("%d\n", m);
return 0;
}
こんな感じかな。
No.3
- 回答日時:
>char buf={0x54, 0x00, 0x05, 0xDC};
>の場合、
>16進数:5DCを10進数1500を
>int型の変数に入れる場合は、どうしたらいいでしょうか?
int m, n, o;
m = buf[2];
n = buf[3];
o = m * 0x100 + n;
とか
o = m << 8 + n;
この回答への補足
回答ありがとうございます。
mは、5ですが、
nは、-36になります。
0xDCを10進数にすると220となり、
教えていただいた、m*0x100 + n の式を
使えるとは思いますが、
nが-36になっています。
なぜでしょうか?
また、どうすればいいでしょうか?
たびたびで申し訳ございませんが、よろしくお願い致します。
No.2
- 回答日時:
サンプルです。
#include <stdio.h>
int main(void)
{
char buf[1500] = { 0x54, 0x00, 0x00, 0x32, 0x00, /* 以下省略 */ };
int m, n;
m = buf[2];
n = buf[3];
printf("%d %d\n", m, n);
return 0;
}
(注)インデントのため、全角空白を使っています。
この回答への補足
早速の回答ありがとうございます。
char buf={0x54, 0x00, 0x05, 0xDC};
の場合、
16進数:5DCを10進数1500を
int型の変数に入れる場合は、どうしたらいいでしょうか?
よろしくお願い致します。
No.1
- 回答日時:
printf("%d %d?n", buf[2], buf[3]);
などとするだけでいいんじゃないでしょうか。
(1) char型は1バイトでしょうから、3,4バイトめはそれぞれbuf[2], buf[3]
(2) printf, fprintf, sprintfなどで、%dを使えば10進数表示になるでしょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のバイナリファイルに関する質問 8 2022/06/24 07:20
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- その他(プログラミング・Web制作) python コードについて(初学者です) 3 2023/07/20 14:44
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
double型の値をchar配列に変換...
-
'const char *' 型は 'char *' ...
-
CStringをwchar_tに変換したい
-
【C言語】構造体内の領域解放(...
-
strncpyと_tcsncpy_sのヌルの扱...
-
型変換
-
c言語配列の結合についてです。...
-
英単語をアルファベット順に
-
charからLPTSTRへの変換方法
-
間接参照のレベルが異なっています
-
charでの計算?
-
c言語でソーベルフィルタが作り...
-
ネットワークにつながっている...
-
IPからホスト名の変換
-
アルファベットの並べ替え
-
文字列ポインタを結合
-
c++ 文字列を入力して、一文字...
-
char型からのバイト数取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
間接参照のレベルが異なっています
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
テキストデータをそのままバイ...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
charでの計算?
-
配列をnビットシフトする
-
c++ 文字列を入力して、一文字...
-
'const char *' 型は 'char *' ...
-
c言語でユーザ関数を利用して入...
-
干支のプログラム
-
switch文で文字を比較すること...
-
char型からのバイト数取得
-
ネットワークにつながっている...
-
getchar()を int でとる理由...
-
間接操作のレベルとは
-
str系関数を使わずに二つの文字...
おすすめ情報