[英]how to convert python float to bytes to be interpreted in C++ programm
我需要構建一個將數據導出為自定義文件格式的python腳本。 然后,該文件由cpp程序讀取(我有源代碼,但無法編譯)。
定制文件格式規格:
我無法將python float導出為字節。 因此崩潰了cpp應用程序而沒有任何錯誤跟蹤。 如果我嘗試用0填充所有浮點數,則加載效果會很好,但是如果我嘗試其他任何操作,它將崩潰。
這就是cpp應用讀取浮動信息的方式
double Eds2ImporterFromMemory::read4BytesAsFloat(long offset) const
{
// Read data.
float i = 0;
memcpy(&i, &_data[offset], 4);
return i;
}
我嘗試如下導出python float:
def write_float(self, num):
# pack float
self.f.write(struct.pack('<f', float(num)))
也有人這樣建議我:
def write_float(self, num):
# unpack as integer the previously pack as float number
float_hex = struct.unpack('<I', struct.pack('<f', num))[0]
self.f.write(float_hex.to_bytes(4, byteorder='little'))
但是它每次都會失敗。 如您所見,我不是cpp家伙。 您對我的python腳本為什么不起作用有任何想法。
提前致謝
請原諒我對python非常不好,但是我試圖產生您想要的結果,它對我來說很好。
python代碼:
import struct
value = 13.37
ba = bytearray(struct.pack("f", value))
for b in ba:
print("%02x" % b)
我想如果您只是希望做到這一點(基本上按該順序將十六進制表示形式寫入文件),那么它將很好地工作。
無論哪種方式,它都會輸出
85
eb
55
41
我將其放入無符號字符數組並以與您的C ++代碼相同的方式使用memcpy:
unsigned char data[] = {0x85, 0xeb, 0x55, 0x41};
float f;
memcpy(&f, data, sizeof(float));
std::cout << f << std::endl;
std::cin.get();
如您所料,它將輸出13.37
。 如果您不能重現正確的結果這樣一來,我懷疑是別的地方發生了錯誤,在這種情況下,這將是有益的,看看如何格式由Python編寫的,它是如何通過C ++讀取。
另外,請記住,有幾種方法可以表示字節數組,例如:
\\x85eb5541
, 0x85, 0xeb, 0x55, 0x41
, 85eb5541
等。 對我來說,很可能您只是沒有輸出正確的格式,因此“解析器”崩潰了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.