電子書籍の厳選無料作品が豊富!

C言語で、05 F7 57 A1 というデータを取得したとします。
それを、unsingned char buf[4] ;に格納します。
そうしたとき、このデータは、数値データを表すものなので、数値にしたいのですが、うまく行きません。
どうすればよいでしょうか。

A 回答 (8件)

4バイトの配列を、どのように数値にするのか


あるいは、どの様な数値に見なすのか
が書いてないと解らんです。

例えばfloatがリトルエンディアンで4byte入っている
とみなして読むなら

*((float *)buf)

で済んじゃうけど、そういう話じゃない?
    • good
    • 0

どういう「数値」にしたいのかわからんけど, 適切な式を書けばよいだけではない?

    • good
    • 0

ご質問はこういう事なのでしょうか...



unsigned char F4ByteChar [] = { (unsigned char)0x05,
  (unsigned char)0xF7, (unsigned char)0x57,
  (unsigned char)0xA1 };

int *F4ByteInt = (int *) F4ByteChar;

printf ( "F4ByteChar [ 0 ] = %d, F4ByteChar [ 1 ] = %d, \n"
    "F4ByteChar [ 2 ] = %d, F4ByteChar [ 3 ] = %d\n",
     F4ByteChar [ 0 ], F4ByteChar [ 1 ],
     F4ByteChar [ 2 ], F4ByteChar [ 3 ] );
printf ( "IntSize = %d, F4ByteInt = %d\n",
     sizeof ( int ), *F4ByteInt );

実行結果は次のとおりです。

F4ByteChar [ 0 ] = 5, F4ByteChar [ 1 ] = 247,
F4ByteChar [ 2 ] = 87, F4ByteChar [ 3 ] = 161
IntSize = 4, F4ByteInt = -1588070651
    • good
    • 0

buf[0] = 0x05;


buf[1] = 0xF7;
buf[2] = 0x57;
buf[3] = 0xA1;

buf[0] = (unsigned char) strtol("05", NULL, 16);
buf[1] = (unsigned char) strtol("F7", NULL, 16);
buf[2] = (unsigned char) strtol("57", NULL, 16);
buf[3] = (unsigned char) strtol("A1", NULL, 16);

sscanf(
"05 F7 57 A1",
"%hhx %hhx %hhx %hhx",
&buf[0], &buf[1], &buf[2], &buf[3]
);
    • good
    • 0

ポインタを使えば、buf から簡単に変換できます。



ただし、CPU のエンディアンを考慮して buf に格納しないと、正しい結果は得られません。
    • good
    • 0

4バイトの整数型(int型)にしたいのですか?


それとも4バイトの浮動小数点型(Float型)にしたいのでしょうか?
    • good
    • 0

> このデータは、数値データを表すものなので、数値にしたいのですが、



どういう数値を表してるの?
16進数の0x05F757A1?
16進数の0xA157F705?
浮動小数点とか?
標準の数値表現でない最初の05が整数部の5.98…とかの固定小数点の数値?

共用体とか、ビットフィールド使うのが良いかも。

union suuti{
 unsigned short i;
 unsigned char b[4];
};
main(){
 unsigned char buf[4];
 union suuti dat;
 memcpy(dat.b, buf, 4);
 printf("dat=%d\n", dat.i)
}

確認してないけど、こんな感じ?
    • good
    • 0

ふつうのCだと面倒くさいのですが


このあたりを参考に
http://www1.cts.ne.jp/~clab/hsample/Func/Func12. …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!