簡體   English   中英

在Java中序列化Float的最佳方法是由C ++應用程序讀取?

[英]Best way to serialize a Float in java to be read by C++ app?

我需要序列化一個java Float,由一個用C ++編寫的應用程序通過Socket通信讀取。 這有標准嗎? 在Float類中使用floatToIntBits方法最簡單,但我不確定它是多么標准。

事實上,這是非常標准的。 floatToIntBits函數為您提供float的IEEE編碼的實際字節。 唯一的問題是字節將是big-endian,因此在讀入C ++應用程序時必須反轉字節順序。 (除非你的C ++平台也是big-endian!)

如果要保留NaN值,請使用Float.floatToIntBits() (或Float.floatToRawIntBits() )將float轉換為整數。 指定floatToIntBits()以IEEE 754格式返回整數,這是幾乎所有C / C ++實現使用的格式。 然后,您應該將整數轉換為網絡字節順序的字節數組(big-endian),然后您可以安全地序列化為文件,套接字,字節流等:

int floatBits = Float.floatToIntBits(myFloat);
byte floatBytes[] = new byte[4];
floatBytes[0] = (byte)(floatBits >> 24);
floatBytes[1] = (byte)(floatBits >> 16);
floatBytes[2] = (byte)(floatBits >> 8);
floatBytes[3] = (byte)(floatBits);

除非你真的需要它是二進制的,無論是出於帶寬還是速度的原因,我個人只是將它轉換為字符串。 它避免了各種二進制兼容性問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM