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

matlab中的十六进制到二进制和十进制,matlab,Matlab,我试图读取一个包含十六进制数据的txt文件。我想把它们转换成十进制,除了一列,我想把它转换成二进制位,然后把它们写在8列中。 样本数据集 2010年1月4日15:31 0x0001 0x0010 0x0014 0x0000 0x0142 0x0001 0x0001 0x0000 0x028F 0x2007 0x0105 0x00AA 0x005A 0xFA8C 0xFACD 0xFAED 0x003B 0xFF3 0xFFDE 0x0080 0xFEE0 0xFF2E 0x0000 0x0108

我试图读取一个包含十六进制数据的txt文件。我想把它们转换成十进制,除了一列,我想把它转换成二进制位,然后把它们写在8列中。 样本数据集

2010年1月4日15:31 0x0001 0x0010 0x0014 0x0000 0x0142 0x0001 0x0001 0x0000 0x028F 0x2007 0x0105 0x00AA 0x005A 0xFA8C 0xFACD 0xFAED 0x003B 0xFF3 0xFFDE 0x0080 0xFEE0 0xFF2E 0x0000 0x0108 2010年1月4日15:31 0x0001 0x0010 0x0014 0x0000 0x0143 0x0001 0x0001 0x0000 0x028F 0x2008 0x0105 0x00AA 0x005B 0xFA8C 0xFAC 0xFAEE 0x003C 0xFF3 0xFFDE 0x0080 0xFEE0 0xFF2E 0x0000 0x0108 2010年1月4日15:31 0x0001 0x0010 0x0014 0x0000 0x0144 0x0001 0x0001 0x0000 0x028F 0x2009 0x0105 0x00A9 0x005C 0xFA8C 0xFAC 0xFAF0 0x003B 0xFFA3

清除所有; %

[b,pathb]=uigetfile{'*.txt'},'Select the file','C:\Data\2010'

file2=[pathb]

data=dlmread'file2','\t',2,1

newdata=hex2decdata

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

非常感谢您的帮助。
谢谢

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

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×1单元格数组日期。 包含转换后的十进制值的N×23数组。使用将值从0到65535(即无符号16位整数)转换为-32768到32767(即有符号16位整数)。 包含转换后的二进制值的N×1单元数组binValues。每个单元格包含一个由0和1组成的1×8字符串。
这里有一个稍微不同的方法,您可以尝试使用它首先将所有数据作为字符串读取:

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×1单元格数组日期。 包含转换后的十进制值的N×23数组。使用将值从0到65535(即无符号16位整数)转换为-32768到32767(即有符号16位整数)。 包含转换后的二进制值的N×1单元数组binValues。每个单元格包含一个由0和1组成的1×8字符串。
我一直收到这个错误…[错误在==>hex2decimal at 6 C=textscanfid,repmat{'%s'},27;%Read data as strings]还有命令用Nx34大小重写一个新文件,因为我将最后一列转换为8二进制bits@AP当前位置我想我已经修复了错误。请尝试新版本。@AP:我不确定您想要输出文件的具体格式,但通常您可以使用该函数。对于输出中的每一行,您将以%s格式打印日期和字符串,然后是23位十进制值%d格式,然后是二进制数%c格式的8个字符。@gnoice。。另一个有趣的问题,看看十六进制FAEE ect,我确信它是一个负值。但是它既有消极的也有积极的,我如何区分它们呢?我可以使用[>>TypeCastunit16sscanf'FAEE'、'%4x'、'int16']来获取负值,但是如果这个数字是正值呢?@AP:我已经更新了代码。特别是,我简化了对0x的删除,并添加了一行,该行将使用将无符号16位整数值转换为有符号16位整数值。我一直收到此错误…[错误在==>hex2decimal at 6 C=textscanfid,repmat{'%s',27;%以字符串形式读取数据]还有一个命令可以重写一个Nx34大小的新文件,因为我已经将最后一列转换为8二进制bits@AP当前位置我想我已经修复了错误。请尝试新版本。@AP:我不确定您想要输出文件的具体格式,但通常您可以使用该函数。对于输出中的每一行,您将以%s格式打印日期和字符串,然后是23位十进制值%d格式,然后是二进制数%c格式的8个字符。@gnoice。。另一个有趣的问题,看看十六进制FAEE ect,我确信它是一个负值。但是它既有消极的也有积极的,我如何区分它们呢?我可以使用[>>TypeCastunit16sscanf'FAEE'、'%4x'、'int16']来获取负值,但是如果这个数字是正值呢?@AP:我已经更新了代码。特别是,我简化了对0x的删除,并添加了一行,该行将使用将无符号16位整数值转换为有符号16位整数值。