我想寫一個函數,將char *緩衝區解包到float *緩衝區。 char *緩衝區最初被打包爲浮點數到字節。char *浮動*
這樣做的最好方法是什麼?
我在下面實現了整數。 我已經在char *緩衝區中打包了一個4字節大小的整數數組。
這是我用來解開它並將其分配給int *的函數。
void CharToInt(int* tar, char* src, int len) {
char* val = src;
char* end = src + len-1;
for(; val<end; tar++,val+=sizeof(int)) {
*tar = ((((*val) < 0) ? 256 + (*val) : (*val) ) +
(((*val+1) < 0) ? 256 + (*val+1) : (*val+1) << 8) +
(((*val+2) < 0) ? 256 + (*val+2) : (*val+2) << 16) +
(((*val+3) < 0) ? 256 + (*val+3) : (*val+3) << 24));
}
}
增加256到符號字節似乎需要符號的字符的照顧。 (-128至127)。
這是因爲它與翻轉位和減1相同?
無論如何,我正在尋找float *等價物。
你只是想讀一串小端'int'的流嗎? – kennytm 2010-08-29 20:45:59
你誤解了浮動工作方式,他們在你的例子中不會像整數一樣工作(字符實際上只是小整數)。上面的例子是有效的,因爲整數可以表示爲2的冪的和,而浮點數不能。要序列化和反序列化浮動我會尋找一些浮動 - >字符串 - >浮動浮動函數。 – Robin 2010-08-29 20:47:10
這是什麼目的?你需要可移植性嗎?請解釋你期望的浮動*等值。 – 2010-08-29 20:48:33