在C / C ++中将十六进制数组作为字符串写入文件

算法

这是一个常见的问题,但我找不到合适的答案。

我有一个包含十六进制值的char数组。我需要在文本文件中“以字符串形式”写入此数组。


我对未存储在文件中的十六进制(理解为垃圾数据)的理解存在缺陷。在十六进制编辑器中,我可以看到数据。

我的十六进制数组实际上是整数数组,而不是字符。我需要考虑到这一点。


我尝试了这个:

   FILE * out = fopen(out_file_name, "w");
   char *in = (char*)malloc(sizeof(char) * num_encryption * 16);
   ....
   fwrite(in, sizeof(char), num_encryption*16 + 1, out);

我也尝试过,stream但它再次在文本文件中打印垃圾。

in数组包含以下十六进制字符串:21c169ea622e7d52ecd35423f4c3c9f4num_encryption=32总共有32行()。

我也尝试过这样的事情:

std::ofstream outfile(argv[21]);
if(outtfile.is_open()){
  //outtfile.write(wo, sizeof(char)*(num_encryption*16+1));
  for(int k = 0; k < num_encryption; k++){
      for(int j = 0; j < 16; ++j){
         outfile << static_cast<unsigned char>(wo[j + k*16] & 0xff);
      }
   outtfile << std::endl;
  }
}

甚至被注释的部分也无法正常工作。有什么建议么?


解决方案


我只是将输出(很好)重定向到文件:

FILE * out = fopen(out_file_name, "w");
for(int k = 0; k < num_encryption; k++){
    for(int j = 0; j < 16; ++j){
       fprintf(outfile, "%02x", wo[j + k*16] & 0xff);
       }
    fprintf(outfile, "\n");
 }
fclose(outfile);

我不确定这是否是最优雅的解决方案,但是它对我有用。如果您知道的更好,请在此处添加。

德国Diago

如果问题也与C ++有关,那么让我为您提供有关如何使用C ++取代的功能的建议。您正在使用C样式的功能。

您应该使用iostream。避免使用malloc,使用new,但更好的是使用avector<char>unique_ptr<char[]>直接使用在这种情况下,我将使用unique_ptr<char[]>它,因为似乎您无需调整数组的大小。我假设您想在下面编写一个二进制文件。

//I assume you want a binary file
std::ostream file("myfile.txt", std::ios::binary);

std::unique_ptr<char []> in = std::unique_ptr<char []>(new char[num_encryption * 16]);
if (file)
   file.write(in.get(), sizeof(char) * num_encryption * 16);

如果需要,可以用十六进制写入文本数据,请以文本模式打开文件:

std::ostream file("myfile.txt"); //Note, no std::ios::binary
...
file >> std::hex >> std::noshowbase; //Write in hex with no base
std::copy(in.get(),
          in.get() + num_encryption * 16,
          std::ostream_iterator<char>(file)); //Write one char at a time, in hex, with no base

警告:未经测试,仅显示了如何按char写入二进制或格式化的十六进制文本的想法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

c# - 写入包含十六进制值作为字节的字符串

来自分类Dev

十六进制值作为字符串 C

来自分类Dev

在 C# 中将十六进制字符串转换为字节数组

来自分类Dev

在C#中将十六进制字符串转换为普通字符串

来自分类Dev

如何在 C++ 中将十六进制转换为十进制字符串?

来自分类Dev

在Windows Phone Runtime C#中将字符串十六进制转换为颜色

来自分类Dev

在C中将十六进制字符串转换为整数

来自分类Dev

如何在C中将字符串转换为十六进制值

来自分类Dev

在C#中将十六进制字符串转换为Number?

来自分类Dev

如何在 C# 中将十六进制字符串值转换为 byte[]

来自分类Dev

C十六进制字符数组到字符串表示形式

来自分类Dev

C字符串中的十六进制值

来自分类Dev

C ++十六进制格式字符串

来自分类Dev

C ++十六进制字符串到字节的转换

来自分类Dev

C ++ WinAPI:HWND返回十六进制的字符串

来自分类Dev

C ++中的十六进制字符串算术

来自分类Dev

如何在C#中将十进制字符串值转换为十六进制字节数组?

来自分类Dev

C#写入十六进制文件

来自分类Dev

十六进制字符串到字节数组C#

来自分类Dev

在C中声明字符串数组(十六进制命令)的语法

来自分类Dev

十六进制字符串到字节数组C#

来自分类Dev

如何在目标C中将十六进制字符串转换为二进制数据

来自分类Dev

如何在目标C中将十六进制字符串转换为二进制数据

来自分类Dev

c#将字符串十六进制转换为ascii吗?从csv文件读取字符串

来自分类Dev

我不明白如何在 C 中将十六进制字符串转换为无符号字符?

来自分类Dev

在C中将20字节的十六进制(字符字符串)转换为10字节的二进制字符字符串

来自分类Dev

在没有(sprintf/printf 库)的情况下,在 C 中将整数转换为十六进制字符串

来自分类Dev

在 C++ 中将 csv 读取十六进制字符串值转换为 uint8_t

来自分类Dev

C#操纵一个字符串作为十六进制代码?

Related 相关文章

  1. 1

    c# - 写入包含十六进制值作为字节的字符串

  2. 2

    十六进制值作为字符串 C

  3. 3

    在 C# 中将十六进制字符串转换为字节数组

  4. 4

    在C#中将十六进制字符串转换为普通字符串

  5. 5

    如何在 C++ 中将十六进制转换为十进制字符串?

  6. 6

    在Windows Phone Runtime C#中将字符串十六进制转换为颜色

  7. 7

    在C中将十六进制字符串转换为整数

  8. 8

    如何在C中将字符串转换为十六进制值

  9. 9

    在C#中将十六进制字符串转换为Number?

  10. 10

    如何在 C# 中将十六进制字符串值转换为 byte[]

  11. 11

    C十六进制字符数组到字符串表示形式

  12. 12

    C字符串中的十六进制值

  13. 13

    C ++十六进制格式字符串

  14. 14

    C ++十六进制字符串到字节的转换

  15. 15

    C ++ WinAPI:HWND返回十六进制的字符串

  16. 16

    C ++中的十六进制字符串算术

  17. 17

    如何在C#中将十进制字符串值转换为十六进制字节数组?

  18. 18

    C#写入十六进制文件

  19. 19

    十六进制字符串到字节数组C#

  20. 20

    在C中声明字符串数组(十六进制命令)的语法

  21. 21

    十六进制字符串到字节数组C#

  22. 22

    如何在目标C中将十六进制字符串转换为二进制数据

  23. 23

    如何在目标C中将十六进制字符串转换为二进制数据

  24. 24

    c#将字符串十六进制转换为ascii吗?从csv文件读取字符串

  25. 25

    我不明白如何在 C 中将十六进制字符串转换为无符号字符?

  26. 26

    在C中将20字节的十六进制(字符字符串)转换为10字节的二进制字符字符串

  27. 27

    在没有(sprintf/printf 库)的情况下,在 C 中将整数转换为十六进制字符串

  28. 28

    在 C++ 中将 csv 读取十六进制字符串值转换为 uint8_t

  29. 29

    C#操纵一个字符串作为十六进制代码?

热门标签

归档