Re: basic言語を理解している人へ質問



[ このメッセージへの返事 ] [ 返事を書く ] [ home.html ]



投稿者: BIO @ n158.biwa.or.jp on 97/10/30 23:47:18

In Reply to: Re: basic言語を理解している人へ質問

posted by 2FD @ 210.130.216.151 on 97/10/30 18:15:32


> > VAL(”&h”+HEX$(INT(w.data)/&H100)) AND &HFF
> > このbasicをC言語にするとどうなるのでしょうか?w.dataは変数です。
>
> これ、MSのVisual Basicのソースですよね?これを前提とします。
>
> このコードは変数 w.data に入っている数値の上位16ビット部分を取り出したい
> だけですね。ただ、int関数は、割り算の結果が整数で無い場合、ちょっと不思議な
> 丸め処理を行うので、これを作った人は困って一旦16進文字列に変換して戻す
> 事によって小数点以下を切り捨てたんだと思います。
>
> 無理矢理Cで書けば次のようになります。
>
>
> char wdata[256];
> int wkint;
> char wkbuff[256];
>
> wkint = atoi(wdata); //変数の中身を整数に変換
> wkint = wkint / 0x100; //変数の中身を 256 で割る
> sprintf(wkbuff, "0x%.2X", wkint); //16進文字列に変換
> wkint = HEX2INT(wkbuff) //16進文字列を整数に変換
> //atoiでは16進文字列は変換不能なので独自の関数を作成する必要有り
>
> こんな所ですかね?Cは久しぶりなので、間違っているかもしれません。(^_^;

w.dataは実数型の変数のようなので、

double wdata;
int ans;

ans = ((int)wdata/0x100) & 0xff;

でansに結果が格納されると思いますが・・・。(久しぶりなので自信ナシ(^^;)

でも、w.dataをキャストして>>でシフトしても同じでは?