我想通過套接字將float值從java發送到C++,沒有任何第三方庫和字節順序安全。如何通過套接字連接將float從java發送到C++?
在C++端,我處理字節順序(使用beej指南中的htonf)。但我怎樣才能處理在Java中的字節順序?對於int,字節順序似乎由java socket處理得很好,但float不傳輸正確的值。或者轉換爲字符串安全發送浮動的唯一方法?
的java:
DataOutputStream out;
out.writeFloat(val);
C++從beej指南轉換方法:
float ntohf(uint32_t p)
{
float f = ((p>>16)&0x7fff); // whole part
f += (p&0xffff)/65536.0f; // fraction
if (((p>>31)&0x1) == 0x1) { f = -f; } // sign bit set
return f;
}
爲什麼不作爲字符串發送並轉換爲浮點數? – Sorter
您是否想過查閱規格? DataOutputStream writeFloat:「使用Float類中的floatToIntBits方法將float參數轉換爲int,然後將該int值作爲4字節數量寫入底層輸出流,先寫高字節,如果沒有拋出異常,則寫入計數器增加4。「和floatToIntBits:「位31(由掩碼0x80000000選擇的位)表示浮點數的符號....」 –
@DeepakMishra由於額外的16個字節問題 –