float型をhtonl(), ntohl()
int main(){ int i; char *p; float f = 1; for(i = 0;i < sizeof(float);i++){ p = (char *)&f; printf("%02X ", (char)*(p + i)); } putchar('\n'); f = htonl(f); //f = htonl(*(long *)&f); for(i = 0;i < sizeof(float);i++){ p = (char *)&f; printf("%02X ", (char)*(p + i)); } putchar('\n'); return 0; }
結果:
00 00 FFFFFF80 3F 00 00 00 00
1バイトごとに16進で出力したいのに、うまくできないや。。
なんだかよく分からないが、float型をhtonlしたい時には、
long型と同じようにhtonlしちゃうと、値が消えてる?
んで
f = htonl(*(long *)&f);
とか、してみるとなんとなくうまくいってんのかな?
以下ソース。
int main(){ int i; char *p; float f = 1; for(i = 0;i < sizeof(float);i++){ p = (char *)&f; printf("%02X ", (char)*(p + i)); } putchar('\n'); //f = htonl(f); f = htonl(*(long *)&f); for(i = 0;i < sizeof(float);i++){ p = (char *)&f; printf("%02X ", (char)*(p + i)); } putchar('\n'); return 0; }
結果:
00 00 FFFFFF80 3F 00 3F 00 47
検証すらできてないけども、とにかく4バイトものは
上記のようにしてみるとうまくいくよう。
(htonsの場合はlong→shortに置き換える)
上記がややこしい場合には、long型の変数に一旦
キャストし値を代入する。その上でhtonlを
使用する。