簡體   English   中英

將結構轉換為char數組

[英]Converting a struct into a char array

我正在嘗試轉換包含以下內容的結構:

struct myData
{
    double value1;
    int32_t value2;
    bool flag;
    int32_t value3;
    int32_t value4;
    bool flagArray[32];
}

我想將此結構轉換為無符號的char數組,以便可以從開放源( http://www.netrino.com/code/crc.zip )應用CRC。 但是我注意到,布爾變量將自動類型轉換為具有4個字節的變量(其中3個字節是未定義的)。 因此,如果CRC校驗和與發送方的接收和解釋方式不同,則可能會失敗。

我可以知道有什么方法可以解決此問題嗎?

謝謝

好的,您有幾個問題。

首先,從您表達問題的方式來看,您似乎正在嘗試通過網絡連接發送C結構。 這是一個非常糟糕的主意,因為C結構的確切內存布局取決於系統,處理器類型,編譯器,編譯器標志等。例如,一個處理器可能是32位,其他處理器可能是64位。一個可能很大-endian,另一個小端。 這將導致結構不匹配。

在布爾之后看到三個額外字節的原因是因為您正在處理8位布爾類型,而處理器是32位。 在32位體系結構上,大多數編譯器將在32位邊界上對齊結構。這將在您看到的結構中保留三個未使用字節的“空間”。

一些編譯器提供了一個選項來強制打包結構。在gcc上,它是#pragma pack。 這將消除您的額外空間。 但這並不能解決您的字節序問題。 為此,您需要使用功能htonl / ntohl,htons / ntohs等。

在編譯器文檔中查找這些手冊以及#pragma軟件包的手冊頁。

暫無
暫無

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

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