如何使用 R 将十六进制数据转换为实数

How to convert hex data into real numbers with R

我很期待将一些数据转换成实数的方式

这里是数据的例子

0400 0000 cf40 2761 d2ff 5552 ceff 5652
e0ff 5b52 e0ff 5b52 eaff 5f52 f4ff 5b52
eaff 5852 eeff 5752 f2ff 5952 eeff 5a52
d8ff 5452 d4ff 5652 caff 5452 ccff 5352
d2ff 5552 c2ff 5a52 ccff 5e52 e2ff 5652
eaff 5852 f0ff 5652 e8ff 5452 e8ff 5452
eaff 5552 deff 5a52 f0ff 5f52 faff 5b52
0a00 6152 0400 6352 f8ff 5f52 0000 5c52
f8ff 5952 0200 5452 0000 5452 f2ff 5952
f8ff 5a52 0400 5652 0400 5652 f2ff 5c52

经过一番调查,我发现似乎是十六进制数据文件(或原始二进制格式) 我尝试了很多方法,比如十六进制编辑器和 R 的其他功能 python,但它对我不起作用

如果您对这些数据有什么想法,请告诉我! 非常感谢!

R中,broman::hex2dec函数将十六进制转换为十进制。

install.packages("broman")

library(broman)

dummy <- read.table(text = "0400 0000 cf40 2761 d2ff 5552 ceff 5652
e0ff 5b52 e0ff 5b52 eaff 5f52 f4ff 5b52
eaff 5852 eeff 5752 f2ff 5952 eeff 5a52
d8ff 5452 d4ff 5652 caff 5452 ccff 5352
d2ff 5552 c2ff 5a52 ccff 5e52 e2ff 5652
eaff 5852 f0ff 5652 e8ff 5452 e8ff 5452
eaff 5552 deff 5a52 f0ff 5f52 faff 5b52
0a00 6152 0400 6352 f8ff 5f52 0000 5c52
f8ff 5952 0200 5452 0000 5452 f2ff 5952
f8ff 5a52 0400 5652 0400 5652 f2ff 5c52", header = F)

apply(dummy, 2, hex2dec)

         V1    V2    V3    V4    V5    V6    V7    V8
 [1,]  1024     0 53056 10081 54015 21842 52991 22098
 [2,] 57599 23378 57599 23378 60159 24402 62719 23378
 [3,] 60159 22610 61183 22354 62207 22866 61183 23122
 [4,] 55551 21586 54527 22098 51967 21586 52479 21330
 [5,] 54015 21842 49919 23122 52479 24146 58111 22098
 [6,] 60159 22610 61695 22098 59647 21586 59647 21586
 [7,] 60159 21842 57087 23122 61695 24402 64255 23378
 [8,]  2560 24914  1024 25426 63743 24402     0 23634
 [9,] 63743 22866   512 21586     0 21586 62207 22866
[10,] 63743 23122  1024 22098  1024 22098 62207 23634

在python

data = [['0400', '0000', 'cf40', '2761', 'd2ff', '5552', 'ceff', '5652'],
        ['e0ff', '5b52', 'e0ff', '5b52', 'eaff', '5f52', 'f4ff', '5b52'],
        ['eaff', '5852', 'eeff', '5752', 'f2ff', '5952', 'eeff', '5a52'],
        ['d8ff', '5452', 'd4ff', '5652', 'caff', '5452', 'ccff', '5352'],
        ['d2ff', '5552', 'c2ff', '5a52', 'ccff', '5e52', 'e2ff', '5652'],
        ['eaff', '5852', 'f0ff', '5652', 'e8ff', '5452', 'e8ff', '5452'],
        ['eaff', '5552', 'deff', '5a52', 'f0ff', '5f52', 'faff', '5b52'],
        ['0a00', '6152', '0400', '6352', 'f8ff', '5f52', '0000', '5c52'],
        ['f8ff', '5952', '0200', '5452', '0000', '5452', 'f2ff', '5952'],
        ['f8ff', '5a52', '0400', '5652', '0400', '5652', 'f2ff', '5c52']]
for row in data:
    for value in row:
        value = int(value, 16)
print(data)

基本上我不知道你是否希望它像那样呈现,所以我制作了一个 'matrix'(如果你想要实际的术语,它是一个列表列表,但它基本上只是一个矩阵) 你的价值观。然后使用 int() 函数将它们转换为十进制。

编辑:决定让它看起来更漂亮

data = [['0400', '0000', 'cf40', '2761', 'd2ff', '5552', 'ceff', '5652'],
        ['e0ff', '5b52', 'e0ff', '5b52', 'eaff', '5f52', 'f4ff', '5b52'],
        ['eaff', '5852', 'eeff', '5752', 'f2ff', '5952', 'eeff', '5a52'],
        ['d8ff', '5452', 'd4ff', '5652', 'caff', '5452', 'ccff', '5352'],
        ['d2ff', '5552', 'c2ff', '5a52', 'ccff', '5e52', 'e2ff', '5652'],
        ['eaff', '5852', 'f0ff', '5652', 'e8ff', '5452', 'e8ff', '5452'],
        ['eaff', '5552', 'deff', '5a52', 'f0ff', '5f52', 'faff', '5b52'],
        ['0a00', '6152', '0400', '6352', 'f8ff', '5f52', '0000', '5c52'],
        ['f8ff', '5952', '0200', '5452', '0000', '5452', 'f2ff', '5952'],
        ['f8ff', '5a52', '0400', '5652', '0400', '5652', 'f2ff', '5c52']]
for row in data:
    string = ''
    for value in row:
        value = int(value, 16)
        string = string + str(value) + ' '*(10-len(str(value)))
    print(string)

输出:

1024      0         53056     10081     54015     21842     52991     22098
57599     23378     57599     23378     60159     24402     62719     23378
60159     22610     61183     22354     62207     22866     61183     23122
55551     21586     54527     22098     51967     21586     52479     21330
54015     21842     49919     23122     52479     24146     58111     22098
60159     22610     61695     22098     59647     21586     59647     21586
60159     21842     57087     23122     61695     24402     64255     23378
2560      24914     1024      25426     63743     24402     0         23634
63743     22866     512       21586     0         21586     62207     22866
63743     23122     1024      22098     1024      22098     62207     23634

您可以使用简单的 python 功能。我已将 Hexa 存储在一个变量中。然后你可以使用 split 函数来转换列表中的十六进制,如下所示。要以数字形式传输 Hexa 列表,请使用带有 for 循环的打印函数。

1. For i.e. hex_string = "your hexa data" 
2. For i.e. ist = (hex_string.split(" "))

查看下面的完整代码。

hex_string = "0400 0000 cf40 2761 d2ff 5552 ceff 5652 e0ff 5b52 e0ff 5b52 
eaff 5f52 f4ff 5b52 eaff 5852 eeff 5752 f2ff 5952 eeff 5a52 d8ff 5452 
d4ff 5652 caff 5452 ccff 5352 d2ff 5552 c2ff 5a52 ccff 5e52 e2ff 5652 
eaff 5852 f0ff 5652 e8ff 5452 e8ff 5452 eaff 5552 deff 5a52 f0ff 5f52 
faff 5b52 0a00 6152 0400 6352 f8ff 5f52 0000 5c52 f8ff 5952 0200 5452 
0000 5452 f2ff 5952 f8ff 5a52 0400 5652 0400 5652 f2ff 5c52"

list = (hex_string.split(" "))
for i in list:
     print(int(i,16))