簡體   English   中英

如何獲取指向 uint32_t 字節的指針

[英]How to get a pointer to the bytes of a uint32_t

我正在嘗試使用uint8_t字節向量創建一個完整的uint32_t 它應該迭代填充。 它可以通過以下任何一種方式發生:

  • 1 個字節和 3 個字節。
  • 2個字節和2個字節。
  • 4字節。
  • 3 個字節和 1 個字節。
    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.

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