You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将gsl::byte数组转换为uint64_t类型值?

将gsl::byte数组转换为uint64_t的正确方法

把gsl::byte数组转成uint64_t,核心要注意**字节序(大端/小端)**的问题——不同的字节顺序会得到完全不同的结果。下面是几种可靠的实现方式:

方法1:手动移位(可控字节序)

这种方式可以明确指定是大端还是小端转换,适合需要严格控制字节顺序的场景。

大端模式(数组首字节为uint64_t最高位)

#include <iostream>
#include <gsl/byte>
#include <array>
#include <cstdint>

int main()
{   
  std::array<gsl::byte, 8> gsl_byte_array{{0x10_gslb,0x12_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb}};

  uint64_t int_value = 0;
  // 大端转换:从高字节到低字节依次移位
  for (size_t i = 0; i < gsl_byte_array.size(); ++i) {
    int_value = (int_value << 8) | static_cast<uint8_t>(gsl_byte_array[i]);
  }

  std::cout << std::hex << int_value << "\n"; // 输出 1012101010101010
  return 0;
}

小端模式(数组首字节为uint64_t最低位)

#include <iostream>
#include <gsl/byte>
#include <array>
#include <cstdint>

int main()
{   
  std::array<gsl::byte, 8> gsl_byte_array{{0x10_gslb,0x12_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb}};

  uint64_t int_value = 0;
  // 小端转换:从低字节到高字节依次移位
  for (size_t i = 0; i < gsl_byte_array.size(); ++i) {
    int_value |= static_cast<uint64_t>(static_cast<uint8_t>(gsl_byte_array[i])) << (i * 8);
  }

  std::cout << std::hex << int_value << "\n"; // 输出 1010101010101210
  return 0;
}

方法2:使用std::memcpy(直接内存复制)

如果数组的字节顺序和目标系统的uint64_t内存布局一致(比如系统是小端,数组也是小端存储),可以直接用std::memcpy高效复制:

#include <iostream>
#include <gsl/byte>
#include <array>
#include <cstdint>
#include <cstring>

int main()
{   
  std::array<gsl::byte, 8> gsl_byte_array{{0x10_gslb,0x12_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb, 0x10_gslb}};

  uint64_t int_value = 0;
  std::memcpy(&int_value, gsl_byte_array.data(), sizeof(int_value));

  // 注意:输出结果取决于系统字节序
  std::cout << std::hex << int_value << "\n";
  return 0;
}

注意事项

  • gsl::byte本质是一种安全的字节类型,转换时需要先转成uint8_t再参与位运算,避免类型问题。
  • 字节序是关键:如果是跨平台或网络通信场景,必须明确指定大端/小端,不能依赖系统默认的内存布局。

内容的提问来源于stack exchange,提问作者user13295228

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:15:28