![](/img/trans.png)
[英]string size after converting const unsigned char[] to std::string
[英]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 作為char
或unsigned char
訪問,但它不允許像訪問其他任何內容一樣訪問char
或unsigned char
。
問題是如何將二進制數據存儲到標准字符串? 如果您只是使用構造函數,則可以通過 xyz.data() 獲取二進制數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.