将int的二进制文件读入字符串c ++

时间:2016-06-12 10:20:48

标签: c++ binaryfiles

我在阅读二进制文件时遇到问题。当我读取包含字符串的二进制文件时,它读取完美。但是当我尝试阅读看起来像这样的文件时:

set.seed(1);x <- rnorm(5)
x <- sort(abs(x))
x
# [1] 0.1836433 0.3295078 0.6264538 0.8356286 1.5952808

它只读取部分内容。这是我读取和将二进制文件转换为字符串的代码。

1830 3030 3030 3131 3031 3130 3000 0000
0000 0000 0000 0000 1830 3030 3030 3131
3030 3030 3100 0000 0000 0000 0000 0000
1830 3030 3030 3131 3030 3131 3000 0000
0000 0000 0000 0000 1830 3030 3030 3131
3031 3030 3000 0000 0000 0000 0000 0000
1830 3030 3030 3131 3031 3131 3100 0000
0000 0000 0000 0000 1830 3030 3030 3131
3130 3130 3100 0000 0000 0000 0000 0000 ... and so on 

但是当我尝试读取0和1的txt文件时,它读得很好。 我对c ++很陌生,我不太清楚为什么会这样。

1 个答案:

答案 0 :(得分:1)

您的问题是您正在使用cout。这旨在打印人类可读的字符串,而不是二进制字符串。所以你标记的行:

cout << input << endl; //this prints just portion of it 000001101100

只会打印部分内容。

您提供的二进制数据是:

1830 3030 3030 3131 3031 3130 3000 0000

以下是数据第一行的ASCII:

<CAN> "000001101100" <NUL> <NUL> <NUL>

第一个<CAN>0x18 - <NUL>的值为0 - 这就是cout停止的地方:它打印人类可读的ASCII值,直到遇到0 - 您的数据已经满了。

您需要打印字符的十六进制值 - 这是一个更复杂的过程。