我希望我已在主题中明确说明了我的目标,以下是我正在使用的代码。
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;作为一个字符串。
答案 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);
并且s
和s1
都包含您的源字符串"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);
答案 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);
会帮你完成这份工作。