OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

16進数変換

  • すぐに回答を!
  • 質問No.149129
  • 閲覧数113
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 12% (35/274)

文字列16進数をバイナリ16進数に変換する参考ソースが以下のようになっていたのですが、どういう意味でしょうか?


strSerial ..... 文字列16進数
ForwardBuf ..... char
BackBuf .....char

/* 文字列16進数長を代入 */
Len_strSerial = strlen(strSerial);

/* 文字列16進数を大文字に変換 */
for (iToupCnt=0; iToupCnt < Len_strSerial; iToupCnt++)
{
tmpbuf[iToupCnt] = toupper(strSerial[iToupCnt]);
}

for (iStrsCnt = 0; iStrsCnt < Len_strSerial; iStrsCnt += 2)
{
ForwardBuf = (tmpbuf[iStrsCnt] >= 'A' ?
tmpbuf[iStrsCnt] - 'A' + 10 :
tmpbuf[iStrsCnt] - '0');

BackBuf = (tmpbuf[iStrsCnt + 1] >= 'A' ?
tmpbuf[iStrsCnt + 1] - 'A' + 10 :
tmpbuf[iStrsCnt + 1] - '0');

binSerial[iBSLCnt] = ForwardBuf * 16 + BackBuf;

iBSLCnt++;
}

ちょっと見にくいですね・・・すみません
よろしくお願いします
ちなみに最終的にはバイナリ16進数とバイナリ16進数長が
求められるようです。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル10

ベストアンサー率 42% (66/154)

もしかしたら、3項演算子の部分でしょうか、ほかのルーチンに関しては
コメント文がありますので。

3項演算子は、(a)?(b):(c)の形であらわされ、(a)は条件式、(b),(c)は
計算式と考えるといいでしょう。(a)は正の場合、(b)が、負の場合(c)が
与えられるということです。
if文を用いると、x=(a)?(b):(c)は、
if( (a) ){ x=(b);}else{ x=(c);}
と書き換えられます。
ここでは、文字のアスキーコードが'A'以上ならば、アスキーコードの値から
-'A'+10とすることで、10から15の値が返されます。そうでないなら、
アスキーコードの値から-'0'とすることで、0から9の値が返されます。

いかがでしょうか?
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ