[英]How to get a pointer to the bytes of a uint32_t
我正在嘗試使用uint8_t
字節向量創建一個完整的uint32_t
。 它應該迭代填充。 它可以通過以下任何一種方式發生:
uint32_t L = 0;
uint32_t* LPtr = &L;
std::vector<uint8_t> data1 = {0x1f, 0x23};
memcpy(LPtr, data1.data(), 2);
EXPECT_EQ(0x231f, L);
以上工作正常(前兩個字節)。 但以下不是(使用兩組字節)。
uint32_t L = 0;
uint32_t* LPtr = &L;
std::vector<uint8_t> data1 = {0x1f, 0x23};
std::vector<uint8_t> data2 = {0x3a, 0xee};
memcpy(LPtr, data1.data(), 2);
memcpy(LPtr, data2.data(), 2);
EXPECT_EQ(0x231f, L);
EXPECT_EQ(0x231fee3a, L);
我覺得問題是LPtr
沒有指向接下來應該填充的下一個字節。 我嘗試LPtr+2
,它沒有指向uint32_t
的單個字節。
這應該使用memcpy
和 output 來完成,應該 go 到uint32_t
。 有什么想法可以解決這個問題嗎?
到目前為止,字節順序不是問題。 一旦uint32_t
完成(最終復制 4 個字節時),就可以更正它。
任何幫助表示贊賞!
問題是您使用的是指向 uint32_t 的指針,因此遞增它不會使其迭代 1 個字節,而只會迭代 4 個字節。 這是一個填充 L 的所有字節的版本,但它仍然與字節順序混淆:
uint32_t gimmeInteger(std::vector<uint8_t> data1, std::vector<uint8_t> data2)
{
assert((data1.size() == 2));
assert((data2.size() == 2));
uint32_t L = 0;
uint8_t* LPtr = reinterpret_cast<uint8_t*>(&L);
memcpy(LPtr, data1.data(), 2);
memcpy(LPtr+2, data2.data(), 2);
return L;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.