我想把一个std::string对象(如名称)转换成C++中的uint8_t数组。 reinterpret_cast<const uint8_t*>
函数拒绝我的字符串。由于我正在使用NS-3进行编码,某些警告被解释为错误。
如果你想要一个指向该string
数据的指针:
reinterpret_cast<const uint8_t*>(&myString[0])
如果你想要一个字符串的数据副本:
std::vector<uint8_t> myVector(myString.begin(), myString.end());
uint8_t *p = &myVector[0];
std::vector
很好用。它可以在不使用 memcpy
或其他类 C 的代码的情况下,创建简单的副本。这种类型的问题往往会有其他复杂的解决方案,但是 std::vector
可以避免这些问题。 - rubenvb...对于任何basic_string对象s,当0 <= n < s.size()时,&*(s.begin() + n) == &*s.begin() + n的标识应该成立。
- Mooing Duck字符串对象有一个.c_str()
成员函数,返回一个const char*
指针。该指针可以转换为const uint8_t*
:
字符串对象具有.c_str()成员函数,返回一个const char *
指针。这个指针可以强制转换为const uint8_t *
:
std::string name("sth");
const uint8_t* p = reinterpret_cast<const uint8_t*>(name.c_str());
请注意,只有在原始字符串对象未被修改或销毁的情况下,此指针才有效。
<algorithm>
中的std::copy
:std::string str = "foo";
uint8_t arr[32];
std::copy(str.begin(), str.end(), std::begin(arr));