我正在从我无法控制的文本文件中读取'qbytearray'字符串。我没有使用Qt
但是这种在文本文件中处理字符串的方式在我的程序中是有效的:
unsigned char* apa = (unsigned char*)"xf1`xf9a\x9cTx82zx17x5xb9xbcx60xcax15";
,但这不起作用:
unsigned char* apa = (unsigned char*)settings_in.at(1).c_str();
(是的,我已经仔细检查了std::string settings_in的内容)
为什么这些不同?我怎样才能用std::string获得最上面的结果呢?
更新:好的,根据你的评论更多信息:我正在阅读Qt生成的文本文件与行,
1rp_key=@ByteArray(xf1`xf8a\x9cTx82zx14x5xb9xbcx80xcax15)
我剥离了括号内的长字符串。我也不想重选,但我试过很多没用的方法,似乎都能让我有所收获。
目标是填充这个变量uint8_t rp_key[0x10] = {0};
硬编码的"基本事实":
unsigned char* apa = (unsigned char*)"xf1`xf8a\x9cTx82zx14x5xb9xbcx80xcax15";
printf("No1: %sn", apa);
和std::string代码,打印出与上面相同的字符串,但采用ASCII (unicode?)格式:
std::string str = settings_in.at(1);
unsigned char* thing = (unsigned char*)str.c_str();
printf("No2: %sn", thing);
嗯,我不确定我能写什么来证明我的'settings_in'的内容。我刚刚试了一下:
char *cstr = "xf1`xf8a\x9cTx82zx18x5xb9xbcx80xcax15";
std::string str = cstr;
unsigned char* thing = (unsigned char*)str.c_str();
printf("No2: %sn", thing);
,但这是不好的,因为结果在我的程序中工作。这是证据吗?(由于原始内容敏感,我正在修改,请忽略实际内容)
这也适用于程序
std::string str = "xf1`xf8a\x7cTx82zx14x5xb9xbcx80xcax15";
unsigned char* thing = (unsigned char*)str.c_str();
printf("No2: %sn", thing);
我要把这个放在这里作为另一个溢出问题的答案:
翻译是在编译时完成的,这样每个字符串都可以使用x手动输入源代码,最终得到它在二进制中表示的字符。如果你想在在运行时,您将需要调用类似strtol()的解析函数Base 16传递包含十六进制的字符串并将其强制转换为char。
如何"x"在字符串中工作?
这完全符合正在发生的事情。
关于如何在运行时模拟的建议似乎并不适用于我的情况。