c++ - 使用 reinterpret_cast c++ 后的意外行为
问题描述
尝试将 a 转换string
为uint8_t*
. 请注意,我是 C++ 的新手,我正在尽力理解它。
我的方法接收一个字符串:
8D7152D03D05942E403EB59DC2923B3F,E5DE428B05C0CE081E20E870712D7BE4,12796
然后由分隔符分割','
。然后,我调用一个函数将string
s 转换为uint8_t*
.
不知何故,我的变量key_
得到了正确的值,但之后,值发生了变化。
struct Key{
uint8_t *key_;
uint8_t *iv_;
uint32_t creation_timestamp;
...
void from_String(string text){
printf("Text to convert = %s\n", text.c_str());
stringstream ss(text);
string item;
vector<string> splittedStrings;
while(getline(ss,item,',')){
splittedStrings.push_back(item);
}
if(splittedStrings.size() == 3){
convert(splittedStrings[0],0);
printf("Key: %s\n", key_);
convert(splittedStrings[1],1);
convert(splittedStrings[2],2);
}else{
printf("Error ! Trying to reconstruct message with invalid data!\n");
}
}
...
void convert(string toConvert, int i){
char* endptr = NULL;
if (i == 0){
key_ = (uint8_t*) reinterpret_cast<const uint8_t*>(&toConvert[0]);
}else if (i == 1){
printf("Key2: %s\n", key_);
iv_ = (uint8_t*) reinterpret_cast<const uint8_t*>(&toConvert[0]);
}else if (i == 2){
creation_timestamp = strtol(toConvert.c_str(), &endptr, 10);
handleErrors(endptr, toConvert, creation_timestamp);
}else {
printf("Error. Operator is not correct!\n");
}
}
};
看看printf
s 如何显示 的值key_
。程序的输出是:
要转换的文本 = 8D7152D03D05942E403EB59DC2923B3F,E5DE428B05C0CE081E20E870712D7BE4,40653
密钥:8D7152D03D05942E403EB59DC2923B3F
密钥2:E5DE428B05C0CE081E20E870712D7BE4
这是因为 的任何意外行为reinterpret_cast
吗?我已经尝试了其他一些将 a 转换string
为 a 的方法,uint8_t*
但结果是一样的。我尝试使用 aswitch
而不是if else
条件,但结果是一样的。
解决方案
推荐阅读
- javascript - 仅打印点阵打印机中的内容
- c# - dataview 排序不正确
- powershell - Powershell 通过 API 获取 Zabbix Hosts
- java - Kotlin 和 Gradle 的 Flutter 依赖问题
- powershell - Powershell Here-String 换行符不适用于输出文件
- firebase - 启用持久性的 Firestore 返回不存在的文档 IDS
- python - Tensorflow 中的线程安全图使用
- smalltalk - Pharo 中的方法
- c# - 将基于委托回调的 API 转换为异步
- windows - 没有为服务“Apache”安装 ConfigArgs,使用 Apache 默认值