1

cpxSR2bnPUihaNxIFFA8Sc + 8gUnWuJxJi8ywSW5ju0npWrFJHW2MSZAeMklcZ71IjrBySF2ci0gdecRI0vD / SM4ZF0m1ZSJJBY8bSZJl / 0intaxIlQJBSPdY3EdBLM9Hp4wLSOK8Nki8L1pIoglxSAvNbkjHg0VIDlv7R6B2Y0elCqVGFWuVRgagAkdxHTdHELxRR9i2VkdyEUlHU84kRzTS2kalKFxG

这是来自我的质谱仪的 XML 文件的字符串。我正在尝试编写一个程序来加载两个这样的文件,从另一个中减去一组值,然后将结果写入一个新文件。根据.mzML 格式的规范文件,数字数据的编码据称是base64。我无法使用许多在线 base64 转换器中的任何一个或使用 NotepaD++ 和 MIME 工具包的 base64 转换器将此数据字符串转换为任何清晰的内容。

在结果文件的上下文中,字符串如下所示:

     <binaryDataArray encodedLength="224">
        <cvParam cvRef="MS" accession="MS:1000515" name="intensity array" unitAccession="MS:1000131" unitName="number of counts" unitCvRef="MS"/>
        <cvParam cvRef="MS" accession="MS:1000521" name="32-bit float" />
        <cvParam cvRef="MS" accession="MS:1000576" name="no compression" />
            <binary>cpxSR2bnPUihaNxIFFA8Sc+8gUnWuJxJi8ywSW5ju0npWrFJHW2MSZAeMklcZ71IjrBySF2ci0gdecRI0vD/SM4ZF0m1ZSJJBY8bSZJl/0intaxIlQJBSPdY3EdBLM9Hp4wLSOK8Nki8L1pIoglxSAvNbkjHg0VIDlv7R6B2Y0elCqVGFWuVRgagAkdxHTdHELxRR9i2VkdyEUlHU84kRzTS2kalKFxG</binary>

在我弄清楚这种编码的格式之前,我无法继续!

提前感谢您的任何回复。

4

3 回答 3

5

您可以使用这个简单的程序将其转换为纯文本:

#include <stdio.h>
int main(void)
{
    float f;
    while (fread(&f, 1, 4, stdin) == 4)
        printf("%f\n", f);
}

我将其编译为“floatdecode”并使用了以下命令:

echo "cpxSR2bnPUihaNxIFFA8Sc+8gUnWuJxJi8ywSW5ju0npWrFJHW2MSZAeMklcZ71IjrBySF2ci0gdecRI0vD/SM4ZF0m1ZSJJBY8bSZJl/0intaxIlQJBSPdY3EdBLM9Hp4wLSOK8Nki8L1pIoglxSAvNbkjHg0VIDlv7R6B2Y0elCqVGFWuVRgagAkdxHTdHELxRR9i2VkdyEUlHU84kRzTS2kalKFxG" | base64 -d | ./floatdecode 

输出是:

53916.445312
194461.593750
451397.031250
771329.250000
1062809.875000
1283866.750000
1448337.375000
1535085.750000
1452893.125000
1150371.625000
729577.000000
387898.875000
248514.218750
285922.906250
402376.906250
524166.562500
618908.875000
665179.312500
637168.312500
523052.562500
353709.218750
197642.328125
112817.929688
106072.507812
142898.609375
187123.531250
223422.937500
246822.531250
244532.171875
202255.109375
128694.109375
58230.625000
21125.322266
19125.541016
33440.023438
46877.441406
53692.062500
54966.843750
51473.445312
42190.324219
28009.101562
14090.161133
于 2013-01-25T02:30:56.067 回答
0

另一个 Java Base64 解码,如果您需要它,可以选择解压缩
供应商规范指示“32 位浮点数”= IEEE-754 并指定小端。
Schmidt 的转换器显示了 IEEE-754 的位模式。

另一个 Notepad++ 步骤来查看十六进制代码:

Notepad++ TextFX 插件(在您已经完成 Base64 解码之后)
选择文本
TextFX > TextFX Convert > Convert text to Hex-32

让您查看十六进制代码:

"000000000 72 9C 52 47 66 E7 3D 48- ... 6E 63 BB 49 |rœRGfç=H¡hÜHP

Little-endian:47529C72 转换(通过施密特),如 David 所示。

于 2013-01-25T04:14:44.037 回答
0

您可以通过pymzML访问Python中的 mzML 文件中的此类数据,pymzML 是 mzML 文件的 python 接口。

http://pymzml.github.com/

于 2013-09-17T18:39:06.477 回答