お世話になります。
今、
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
charでの計算?
-
strncpyと_tcsncpy_sのヌルの扱...
-
fgetsなどのときのstdinのバッ...
-
簡単な電卓プログラムについて
-
CStringをwchar_tに変換したい
-
C言語のfor文です。 繰り返しの...
-
const char** p;のとき、free(p...
-
構造体の各メンバにfor文からア...
-
絶対パスからのファイル名の切...
-
javaでunsignedは使えないので...
-
main の引数には const 付けた方が
-
C言語で文字列からパラメタをss...
-
atoi( ) の反対をやりたい
-
switch文で文字を比較すること...
-
型変換
-
文字列から空白を取り除きたい...
-
間接参照のレベルが異なっています
-
c言語プログラミング実行時エラ...
-
charからLPTSTRへの変換方法
-
数値を文字化するにはどうすれ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
CStringをwchar_tに変換したい
-
charでの計算?
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
'const char *' 型は 'char *' ...
-
テキストデータをそのままバイ...
-
配列をnビットシフトする
-
半角カナ→16進
-
double型の値をchar配列に変換...
-
sprintfに同じ変数は使えるか
-
ファイル名である文字列からbas...
-
ネットワークにつながっている...
-
ftoa の作り方
-
間接操作のレベルとは
-
型変換
-
C言語です
-
C言語のfor文です。 繰り返しの...
-
Win32APIでのエディットボック...
-
【C言語】文字型と整数型の違い
おすすめ情報