在matlab中十六进制到二进制和十进制

时间:2010-11-30 03:15:22

标签: matlab

我正在尝试读取具有十六进制数据的txt文件。我希望将它们转换为十进制,除了一列我想要转换成二进制位并将它们写入8个单独的列。 样本数据集

  

1/4/2010 15:31< 00000> 0x0001 0x0010 0x0014 0x0000 0x0142 0x0001 0x0001 0x0000 0x028F 0x2007 0x0105 0x00AA 0x005A 0xFA8C 0xFACD 0xFAED 0x003B 0xFFA3 0xFFDE 0x0080 0xFEE0 0xFF2E 0x0000 0x0108   1/4/2010 15:31< 00000> 0x0001 0x0010 0x0014 0x0000 0x0143 0x0001 0x0001 0x0000 0x028F 0x2008 0x0105 0x00AA 0x005B 0xFA8C 0xFACC 0xFAEE 0x003C 0xFFA3 0xFFDE 0x0080 0xFEE0 0xFF2E 0x0000 0x0108   1/4/2010 15:31< 00000> 0x0001 0x0010 0x0014 0x0000 0x0144 0x0001 0x0001 0x0000 0x028F 0x2009 0x0105 0x00A9 0x005C 0xFA8C 0xFACC 0xFAF0 0x003B 0xFFA3

全部清除; %

  

[b,pathb] = uigetfile({'* .txt'},'选择文件','C:\ Data \ 2010');

     

file2 = [pathb b];

     

data = dlmread('file2','\ t',2,1);

     

newdata = HEX2DEC(数据);

现在我不知道如何摆脱所有值中的0x,我需要将最后一列转换为二进制并写入8列。

非常感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:1)

您可以尝试稍微不同的方法,使用TEXTSCAN将所有数据首先读取为字符串:

fid = fopen(file2,'rt');                   %# Open the file
str = ['%s %s %s ' repmat('0x%s ',1,24)];  %# Format string for columns
C = textscan(fid,str,'CollectOutput',1);   %# Read all fields as strings
                                           %#   (removing 0x's)
fclose(fid);                               %# Close the file
C = C{1};                                  %# Remove outer cell encapsulation

dates = strcat(C(:,1),{' '},C(:,2));         %# Collect the date strings
decValues = cellfun(@hex2dec,C(:,4:end-1));  %# Convert the first 23 columns to
                                             %#   decimal values
decValues = decValues-65536.*(decValues > 32767);  %# Change from unsigned to
                                                   %#   signed 16 bit values
binValues = cellfun(@(n) dec2bin(hex2dec(n),8),...    %# Convert the last column
                    C(:,end),'UniformOutput',false);  %#   to binary strings

如果您的文件中有N行,则最终应该:

  • 日期字符串的N-by-1单元格数组dates(可以转换为serial date numbersdate vectors)。
  • 包含转换后的十进制值的N-by-23数组decValues。使用two's complement将值从0到65535(即无符号16位整数)转换为-32768到32767(即带符号的16位整数)。
  • 包含转换后的二进制值的N-by-1单元阵列binValues。每个单元格包含1×8字符串的零和1。