16進のWORDデータを10進に変換する方法

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

16進のWORDデータを10進に変換する方法

#1

投稿記事 by overdo » 17年前

はじめまして。overdoといいます。
最近、こちらでDXライブラリの存在を知り、全く初めてゲームを作り始めた次第ですが、早くも分からないことがあり調べてみましたが結局分からず、すみませんが、こちらで質問させてください。

環境:VC++2003

バイナリデータにて、[59 01](リトルエンディアン)の2バイトデータがあった場合にこれを10進変換しますと345ですが、これをどうやって変換すればいいのか分かりません。

DXライブラリにファイル入力関数があったので以下のように使ってみました。

int hdl_file;
int intBig;
int intLittle;
hdl_file = FileRead_open("binarydata.txt"); //ファイルオープン
intBig = FileRead_getc(hdl_file); //59(16進)がとれます
intLittle = FileRead_getc(hdl_file); //01(16進)がとれます

//ココで5901 -> 345に変換する処理を行いたい

FileRead_close(hdl_file); //ファイルクローズ
※open~close内は実際はループ

二つの変数に分けた時点で間違いな気もするのですが、この二つを使って変換する関数があるのかが分かりません。
2バイトずつ取得する方法も分からなかったので5901(0159h)を取得して345に変換する関数でも構わないのですが・・。
他言語出身ですので、説明の仕方自体おかしいかもしれませんが、何卒、ご教授頂ければと思います。
宜しくお願いします。

tk-xleader

Re:16進のWORDデータを10進に変換する方法

#2

投稿記事 by tk-xleader » 17年前

シフト演算を利用すれば問題ないと思います。

int Value;



Value=intBig|(intLittle<<8);

<余談>
Dxライブラリ使用ということで、細かいC++の言語仕様については無視ということで…

toyo

Re:16進のWORDデータを10進に変換する方法

#3

投稿記事 by toyo » 17年前

Visual C++ならMAKEWORDというマクロが定義されていると思います(WinDef.h)

#define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))

Value = MAKEWORD(intLittle, intBig);

/* intLittleとintBigが私の感覚では逆です */

toyo

Re:16進のWORDデータを10進に変換する方法

#4

投稿記事 by toyo » 17年前

間違えた
intBig = FileRead_getc(hdl_file); //59(16進)がとれます
intLittle = FileRead_getc(hdl_file); //01(16進)がとれます
の場合は
Value = MAKEWORD(intBig, intLittle);
になりますね。

overdo

Re:16進のWORDデータを10進に変換する方法

#5

投稿記事 by overdo » 17年前

ありがとうございます。シフト後のOR演算ということですね。
このような解決へのアプローチは慣れなのでしょうね・・。
この式に感動しました(笑)。

> /* intLittleとintBigが私の感覚では逆です */

ごもっともです。変数名を改めました・・・。
tkmakwins15さん、toyoさんありがとうございました。
今後ともよろしくお願いします。

閉鎖

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