C ++将String转换为unsigned char并将其转换回来获取字符串

时间:2016-02-03 08:53:11

标签: c++ string char unsigned-char

我希望我已在主题中明确说明了我的目标,以下是我正在使用的代码。

data_ptr is test
p X@
p1 X@
p2 X@
final is X@
final1 is 4<-->4

以及它打印的内容如下。

git diff foo1 foo2 > diff.txt

我该怎样做才能获得&#34;测试&#34;作为一个字符串。

4 个答案:

答案 0 :(得分:2)

正如上面的评论中指出的那样,你的data_ptr在线投射

const uint8_t* p = reinterpret_cast<const uint8_t*>(&data_ptr);

从指向chars(char*)的指针转换为chars指针的指针(在您的情况下为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);

并且ss1都包含您的源字符串"test"

答案 1 :(得分:0)

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

答案 2 :(得分:0)

“test”不适合unsigned char。您应该使用标准c函数atoi和itoa来进行转换。如果你想逐个字符地使用这些功能,也可以使用这些功能。

答案 3 :(得分:0)

我不完全确定你在这里要做什么。但是,改变

const uint8_t* p = reinterpret_cast<const uint8_t*>(&data_ptr);

const uint8_t* p = reinterpret_cast<const uint8_t*>(data_ptr);

会帮你完成这份工作。