【问题标题】:Outputting a string variable into a text file in HEX format将字符串变量输出到 HEX 格式的文本文件中
【发布时间】:2011-06-17 05:43:51
【问题描述】:

我遇到了一个我无法解决的问题。 所以我需要的是:我需要制作一个程序来接收一个字符串输入并将其转换为十六进制,然后将其保存到文件中。 如果文件没有创建,它应该,但如果已经有一个,它应该继续写入相同的(我猜“a+”参数是我需要的,对吧?)

举个例子。我执行程序。要求我输入一些单词。 我输入“stack”,它返回了正确的“73 74 61 63 6B”。 我已经用这个算法做到了

#include <cstdio>
#include <cstdlib>
#include <string>
#include <iostream>
using namespace std;
int main(){
 string a;
 cin >> a;
 for( int i = 0; i < a.size(); i++ )
  printf( "%hX ", a[i] );
 cout << endl;
 system( "pause" );
 return 0;
}

这很好,但我需要在文本文件中输出。 我用这个:

for( int i = 0; i < a.size(); i++ ) 
     {  
      fprintf(pFile, "%hX ", a[i]); 
     }

但它不起作用。可以帮忙看看这个吗,谢谢!

完整的代码,对不起,我在代码示例方面遇到了问题,希望你不介意 pastebin 链接 http://pastebin.com/3u1mfg8n

【问题讨论】:

  • “它不起作用”不是很具有描述性。您可以添加更多详细信息吗?它有什么作用?没有?崩溃?
  • 显示你的 pFile 声明和赋值代码。
  • 对不起,我想我忘了。是的,它什么都不做......我将在问题中添加代码
  • 起初我使用了那个代码,但是十六进制输出不能正常工作。我按照说明进行操作,但文件中只有相同的字符串。

标签: c++ string file text hex


【解决方案1】:

这会将字符串中的每个字节(即每个字符)转换为其 2 字符十六进制编码:

for(int i = 0; i < a.size(); i++)
{
    printf("%2.2X ", a[i]);
}

如果你想存储它:

std::string b = "";
for (int i = 0; i < a.size(); ++i)
{
    char tmp[3] = {0};
    sprintf(tmp, "%2.2X", a[i]);
    b += tmp;
}

然后您可以轻松地将整个b 字符串写入文件。

【讨论】:

  • 谢谢,我会尝试运行它!但问题是我的代码有效,只是我需要文本文件中的那些输出。
【解决方案2】:

您正在学习 C++,为什么不使用文件流?

#include <fstream>
#include <iomanip>

using namespace std;

int main () {
  // Read your string as before
  fstream fs;
  fs.open ("hex.txt", fstream::out | fstream::app); // app = append to file
  for(int i=0; i<a.size(); ++i) 
  {  
    fs << hex << static_cast<int>(a[i]) << " ";
  }
  fs.close();
  return 0;
}

【讨论】:

  • 感谢您这么快的回答。我遇到了与前几次尝试相同的问题。例如“stack”的输出不是它的十六进制代码,而是“s t a c k”。
  • @Juraj:我编辑了答案以添加 static_cast(我没有在 IDE 中编写代码:)再试一次。
  • 当然,我会在几秒钟内告诉你 :) 编辑:太棒了,这成功了!非常感谢其他试图提供帮助的人!
【解决方案3】:

我已经测试了您的代码并且它工作正常。它会在运行它的目录中创建一个名为 Personal Shop Codes.txt 的文件。我预计问题是您的程序不是从您希望运行它的目录运行的,因此您的输出文件只是放错了位置。在 IDE 中执行程序时经常会出现这种情况。

【讨论】:

  • 我已将桌面上的可执行文件复制到一个新文件夹中,运行后它创建/更新了文本文件。
【解决方案4】:

您需要先使用 fopen() 并将其分配给您的 FILE 指针:

FILE *pFile;
pFile = fopen("output.txt","w");

然后在你的程序完成写入后关闭文件:

fclose(pFile);

【讨论】:

  • 我已经做到了,有点误会很抱歉。几秒钟后我更新了我的问题并添加了 pastebin 链接:pastebin.com/3u1mfg8n
  • 当我将该示例剥离为您想要的内容时,它似乎可以完美运行:pastebin.com/9rELapSr
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
相关资源
最近更新 更多