C++ 将字符串转换为无符号字符并将其转换回以获取字符串
C++ Converting a String to unsigned char and convert it back to get the string
我希望我已经在主题中清楚地说明了我的目标,以下是我正在使用的代码。
#include <stdio.h>
#include <inttypes.h>
#include <iostream>
using namespace std;
int main() {
const char *data_ptr =(char*)"test";
const uint8_t* p = reinterpret_cast<const uint8_t*>(&data_ptr);
uint8_t* p1= const_cast<uint8_t*>(p);
char* p2 = reinterpret_cast<char*>(p1);
const char *final= const_cast<const char*>(p2);
string s1( data_ptr);
string s( reinterpret_cast<char const*>(p1),4) ;
cout<<"data_ptr is "<<data_ptr<<endl;
cout<<"p "<<p<<endl;
cout<<"p1 "<<p1<<endl;
cout<<"p2 "<<p2<<endl;
cout<<"final is "<<final<<endl;
cout<<"final1 is "<<s1.size() << "<-->"<<s.size()<<endl;
return 0;
}
它打印的内容如下。
data_ptr is test
p X@
p1 X@
p2 X@
final is X@
final1 is 4<-->4
我应该怎么做才能将"测试"作为字符串。
正如上面的评论所指出的,你的data_ptr
排队
const uint8_t* p = reinterpret_cast<const uint8_t*>(&data_ptr);
从指向字符的指针(char*
)转换为字符指针的指针(在您的例子中uint8_t*
,引用&data_ptr
,而又是char*
)。这也是为什么你的字符串s1
string s1( data_ptr);
包含正确的test
字符串,而 s
,如初始化
string s( reinterpret_cast<char const*>(p1),4) ;
p1
引用错误的指针指向指向字符的指针
const uint8_t* p = reinterpret_cast<const uint8_t*>(&data_ptr);
uint8_t* p1= const_cast<uint8_t*>(p);
只是用垃圾数据初始化。
所以只需改变你的路线
const uint8_t* p = reinterpret_cast<const uint8_t*>(&data_ptr);
自
const uint8_t* p = reinterpret_cast<const uint8_t*>(data_ptr);
s
和s1
都包含您的源字符串"test"
。
"test" 不适合无符号字符。 您应该使用标准的 c 函数 atoi 和 itoa 进行转换。 如果您想逐个字符地执行此操作,也可以使用这些函数。
我不完全确定你在这里想做什么。但是,改变
const uint8_t* p = reinterpret_cast<const uint8_t*>(&data_ptr);
自
const uint8_t* p = reinterpret_cast<const uint8_t*>(data_ptr);
会为你做这项工作。
std::string 有一个构造函数,将char*
或const char*
作为参数。它还具有一个功能c_str()
可以转换回char*
因此所需要做的就是:
const char* charptr = "Test";
string str(charptr);
const char* charptr2 = str.c_str();
//just to verify:
cout << charptr << "n";
cout << str << "n";
cout << charptr2 << "n";
编辑:正如您在评论中所说,您需要一个uint8_t
,为此只需按原样获取原始char*
:
const uint8_t* intptr = reinterpret_cast<const uint8_t*>(charptr);
在线试用: http://ideone.com/drJYuR
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组