首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从文件C++读取HEX到ASCII的正确方法

从文件C++读取HEX到ASCII的正确方法
EN

Stack Overflow用户
提问于 2021-12-31 20:47:27
回答 3查看 114关注 0票数 -1

在我下面的代码中,从文件中读取HEX并存储在字符串数组中的CODE 1在打印出来时不会将其转换为ASCII

删除pls

EN

回答 3

Stack Overflow用户

发布于 2021-12-31 21:14:10

好吧,看上去有点混乱。首先,我要问你是否确定你知道你的档案里有什么。

就是它里面有,哦,看起来大概有二十个字符,

代码语言:javascript
复制
\
x
4
8

等等?

或者它包含一个十六进制48 (一个字节),一个十六进制83 (一个字节),总共5个字符?

我打赌这是第一次。我敢打赌你的文件大约有20个字符长,包含正在打印的字符串。

如果是这样的话,那么代码就是按照您的预期执行的。它正在读一行文字,然后把它写回来。如果您想让它像编译器那样实际地解释它,那么您必须自己执行这些步骤。

现在,如果它实际上包含了十六进制字符(但我打赌它没有),那么这是一个稍微不同的问题,我们将不得不看看它。但我认为您只是有一个字符串,其中包括\x。而读/写并不会自动为你带来一些魔力。

票数 0
EN

Stack Overflow用户

发布于 2021-12-31 21:18:17

从文件读取时,反斜杠字符不会转义。文件中的test字符串实际上是一个chars数组:{'\\', 'x', '4', '8', ... }

虽然硬编码的文字字符串,"\x48\x83\xEC\x28\x48\x83";是完全十六进制由编译器转义。

如果您真的希望将数据存储为一系列“反斜杠x NN”序列的文本文件,则需要在读取文件后进行转换。这是一个被黑客攻击的循环,可以帮到你。

代码语言:javascript
复制
std::string test = sstr.str();

char temp[3] = {};
size_t t = 0;
std::string corrected;

for (char c : test)
{
   if (isxdigit(c))
   {
       temp[t] = c;
       t++;
       if (t == 2)
       {
          t = 0;
          unsigned char uc = (unsigned char)strtoul(tmp, nullptr, 16);
          corrected += (char)uc;
       }
   }
}
票数 0
EN

Stack Overflow用户

发布于 2021-12-31 21:30:29

您可以在\x中拆分返回的字符串,然后进行从string到int的转换,最后转换为char。

这个资源是有帮助的。

斯特托克转换

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70545579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档