簡體   English   中英

從 std::string 轉換為 const unsigned int

[英]Converting from std::string to const unsigned int

我的有效負載存儲在std::string xyz (保存二進制數據)中,我需要將其傳遞給 function ,將其作為const unsigned int* 如何從std::string轉換為const unsigned int*

我嘗試reinterpret_cast<const unsigned int*>(&xyz.front())但它不起作用!

function原型如下:

void roll(void *pdst, const unsigned int *psrc);

pdst將保存結果。

不要使用std::string存儲二進制數據; class 專為使用字符串而設計。 感覺就像有原始的 C 代碼使用char數組來存儲字節序列並將其轉換為std::string用於 C++。 在這種情況下,它沒有被用作字符串,因此將其存儲在std::string中是沒有意義的。

從那里開始,轉換為unsigned int ,對於初學者來說,即使您使用更原始的類型(例如char * )也不能簡單地轉換它,因為它會違反嚴格別名的規則,從而導致未定義的行為。 您要做的是創建一個新變量並將數據memcpy到這個新變量中。

這是 C++14 標准工作草案中描述兼容類型 (3.10 p10) 的部分:

如果程序嘗試通過以下類型之一以外的泛左值訪問 object 的存儲值,則行為未定義:54

— object 的動態類型,

— object 的動態類型的 cv 合格版本,

— 與 object 的動態類型類似(如 4.4 中定義)的類型,

— 對應於 object 的動態類型的有符號或無符號類型,

— 有符號或無符號類型,對應於 object 的動態類型的 cv 限定版本,

— 在其元素或非 static 數據成員中包含上述類型之一的聚合或聯合類型(遞歸地包括子聚合或包含聯合的元素或非靜態數據成員),

— 一種類型,它是 object 的動態類型的(可能是 cv 限定的)基本 class 類型,

— char 或 unsigned char 類型。

正如您所看到的,它明確允許將任何 object 作為charunsigned char訪問,但它不允許像訪問其他任何內容一樣訪問charunsigned char

問題是如何將二進制數據存儲到標准字符串? 如果您只是使用構造函數,則可以通過 xyz.data() 獲取二進制數據。

暫無
暫無

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

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