【问题标题】:Copy a basic_string<char16_t> to vector<uint8_t>将 basic_string<char16_t> 复制到 vector<uint8_t>
【发布时间】:2014-09-04 14:59:25
【问题描述】:

请提出一种将字节从基本字符串复制到向量的有效方法。

我不关心编码,只想将字节复制到字节数组。稍后将使用正确的下游编码对其进行解释。

谢谢。

【问题讨论】:

  • 所以你想要在向量中为字符串中的每个字符使用两个整数?
  • 是的。我的字符是 UTF-16。所以它是两个字节。

标签: c++ char16-t


【解决方案1】:

一种选择是获取数据指针,将其转换为您的新类型并将其分配给您的目标向量:

std::basic_string<char16_t> src;

const uint8_t *begin = reinterpret_cast<uint8_t const*>(src.data());
const uint8_t *end = reinterpret_cast<uint8_t const*>(src.data() + src.size());
std::vector<uint8_t> dst(begin,end);

这是reinterpret_cast 是完全有效选择的少数情况之一。来自cppreference(我添加的亮点):

static_cast 不同,但与const_cast 类似,reinterpret_cast 表达式不会编译为任何 CPU 指令。它纯粹是一个编译器指令,指示编译器将表达式的位序列(对象表示)视为具有new_type类型。

【讨论】:

  • 感谢您的回答。我就是这样做的。但我实际上想知道是否有另一种方法可以避免 reinterpret_casts。
  • @SkypeMeSM 我认为在这种情况下 reinterpret_cast 是完全有效的。毕竟,这正是我们所做的:char16_t 的数组被按位解释为uint8_t 的数组。
猜你喜欢
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 2020-12-09
相关资源
最近更新 更多