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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

5564閲覧

16進表記値を10進数に変換

JanTh1989

総合スコア87

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/01/08 09:57

編集2020/01/08 10:14

16進数表記となる数値の10進数変換方法をご教授願えないでしょうか。

例)
16進数値20H を 10進数値20に変換。

以下のようなことを行いたいと考えております。
①16進数20Hをバイナリファイル出力。
②バイナリを数値型読み込みで、読み込みに使った変数には32が設定される。
③読み込んだ値を他変数には10進数20で渡したい。

<イメージ>
long hex = 0x20;
long dec = hex; ←このdec値が20になる変換方法が質問内容になります。

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

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

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

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

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

cateye

2020/01/08 10:09 編集

説明に数字と数値が、混在しているように思われます・・・0x32はASCIIの'2'ですが?
JanTh1989

2020/01/08 10:10

バイナリには16進表記で20H、つまり10進32の数値が入っているという状態です。 これを、10進20にしたい、という内容になります。
cateye

2020/01/08 10:16

20というのは文字列ですか?
JanTh1989

2020/01/08 10:20

数値です。 <イメージ>を質問内容に追加致しました。
cateye

2020/01/08 10:23 編集

やってやれなくはないですが、意味(数値)が変わるけど良いのですか?
JanTh1989

2020/01/08 10:27

すみません。 お分かりでしたらお教えいただきたく思います。 バイナリは他所が作るもので、その後参照する側は10進扱いにできないと困るところでして・・・。 例えば、バイナリでは西暦を上位、下位で分けているのですが、2020年を16進の20H,20H、つまり32、32で出力されています。 そのデータを読み込んでそのまま年変換しようにも、3232年にしかできず、難航してしまっている有様です。
fana

2020/01/08 10:30

(0xAFとかの場合はどうするんだろう?)
dodox86

2020/01/08 10:51

既に回答をいただいていますが、他所とのインターフェースが関係するのであれば、BCD(Binary Coded Decimal)と言うことなのかどうかを確認した方が良いと思います。
guest

回答2

0

こんなの?・・・シフトする数値を変えれば、longの桁数最大まで行けると思う。

text

1 2usr ~/Project/test % ./a.out 3Hex:2020 Dec:2020 4usr ~/Project/test % cat t1.c 5#include <stdio.h> 6 7#include <stdio.h> 8 9static long cv(long hex) 10{ 11 long ret = 0; 12 13 for(int i = 12; i >= 0; i -= 4) { 14 ret *= 10; 15 ret |= (hex >> i) & 0x0F; 16 } 17 return ret; 18} 19 20int main(void) 21{ 22 long hex = 0x2020; 23 24 long dec = cv(hex); 25 printf("Hex:%lx Dec:%ld\n", hex, dec); 26 27 return 0; 28}

投稿2020/01/08 10:52

編集2020/01/08 10:57
cateye

総合スコア6851

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

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

0

ベストアンサー

0x20は10進にすると32ですが。。

BCDにしたいってことなら、

int dec=((hex>>4)&0xf)*10+(hex&0xf);

ってことになりますが、これでいいのかな?

投稿2020/01/08 10:28

編集2020/01/08 10:29
y_waiwai

総合スコア88163

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

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

JanTh1989

2020/01/10 10:16

ありがとうございます。 思っていた値になりました。 最大が16進2桁のため、提供頂いたコードでうまくいきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問