如何在通訊協議中傳輸浮點數

2021-06-19 01:14:20 字數 938 閱讀 9451

先來看乙個錯誤:if(

get_uint32_from_tlv_chain

(ptlvlist,31

,&dwbasescore

)<0)

if(get_uint32_from_tlv_chain

(ptlvlist,6

,&dwbestansuid1

)<0)

if(get_uint32_from_tlv_chain

(ptlvlist,7

,&dwbestansuid2

)<0)

if(get_uint32_from_tlv_chain

(ptlvlist,8

,&dwreason

)<0)

fbasescore=*

(float*)(

&dwbasescore

); 這是乙個實際生產環境下的**,通過tlv傳輸了乙個uint32的值,然後將位址轉化為float *,這樣得到的結果是錯的。這個跟浮點數的編碼有關,具體原因參見

一般來說在通訊協議中傳輸浮點數的需求不多,也盡量避免。如果有,那怎麼辦?這裡提供乙個做法。

static void writedouble(pyobject* outbuf, double dub) transfer;

transfer.f = dub;

writei64(outbuf, transfer.t);

}static double readdouble(decodebuffer* input) transfer;

transfer.f = readi64(input);

if (transfer.f == -1)

return transfer.t;

}這是摘自thrift binary protocol的一段**,這裡使用的技巧很容易看明白。

對於float的也可以這麼做。

如何在shell中對浮點數進行計算

在shell中具有最基本的數學計算能力,如可以使用expr let 但這些都只能處理整形資料。為了要計算小數,就需要通過bc命令擴充套件。下面演示了乙個例子,判斷輸出的引數型別,然後計算出它的平方.bin sh filename testbc var 1 dd echo var bc 2 dev n...

浮點數如何在計算機中表示

浮點數如何在計算機中表示 乾坤有數 根據ieee 754標準,浮點數的表示形式如下 其中,s為數的符號位,為0時表示正數,為1時表示負數 p為階碼,通常用移碼表示 m為尾數,用原碼表示。目前,計算機中主要使用三種形式的ieee 754浮點數,如下表所示 在ieee 754標準中,約定小數點左邊隱含有...

浮點數在計算機中如何儲存

浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...