【发布时间】:2016-07-03 12:16:32
【问题描述】:
我发现file sink block生成的文件是二进制格式的, 不能通过 gedit 在 linux 或其他东西下编辑, 那么如何编辑文件呢?
我发送一个包含“hello world”的 dat 文件,我想接收一个包含“hello world”的文件
【问题讨论】:
我发现file sink block生成的文件是二进制格式的, 不能通过 gedit 在 linux 或其他东西下编辑, 那么如何编辑文件呢?
我发送一个包含“hello world”的 dat 文件,我想接收一个包含“hello world”的文件
【问题讨论】:
这个问题经常被问到。所以这里有一个link to the FAQ 和摘录:
所有文件都是纯二进制格式。只是位。而已。浮点数据流以 32 位的形式保存在文件中,一个接一个。复数信号的实部为 32 位,虚部为 32 位。读回复数意味着读入 32 位,将其保存到复数数据结构的实部,然后读入接下来的 32 位作为数据结构的虚部。继续阅读数据。
查看
gr-utils中的 Octave 和 Python 文件,以使用 Octave 和 Python 的 Scipy 模块读取数据。格式的例外是使用元数据文件格式。这些文件由 File Meta Sink:http://gnuradio.org/doc/doxygen/classgr_1_1blocks_1_1file__meta__sink.html 块生成并由 File Meta Source 块读取。有关如何处理这些文件的更多信息,请参阅元数据文件格式的手册页。
将整个文件读入numpy数组的单行Python命令是:
f = scipy.fromfile(open("filename"), dtype=scipy.uint8)将 dtype 替换为 scipy.int16、scipy.int32、scipy.float32、scipy.complex64 或您使用的任何类型。
所以您的问题“我该如何编辑?”归结为理解这是原始数据。您当然可以在字节级别上修改它(例如使用十六进制编辑器),但通常,您会拥有(或编写)一些将数据加载到程序内表示中的程序(例如复数数组)和看看那个。
你问这个的方式表明你并没有真正意识到你在看什么(因为你甚至没有提到如何你传输那个字符串)。也许您的数据由于噪声引起的符号错误而出现位错误?很可能,没有完成同步,因此您收到的位与您要发送的字节顺序不同。
我认为这可能是一个非常好的地方,可以将您指向GNU Radio Guided Tutorials。
【讨论】: