от шестнадцатеричного до двоичного и десятичного в Matlab - PullRequest
1 голос
/ 30 ноября 2010

Я пытаюсь прочитать текстовый файл с шестнадцатеричными данными. Я хочу преобразовать их в десятичные, кроме одного столбца, который я хочу преобразовать в двоичные биты и записать их в 8 отдельных столбцах. Примерный набор данных

1/4/2010 15:31 <00000> 0x0001 0x0010 0x0014 0x0000 0x0142 0x0001 0x0001 0x0000 0x028F 0x2007 0x0105 0x00AA 0x005A 0xFA8C 0xFACD 0xFAED 0x003B 0x000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1/4/2010 15:31 <00000> 0x0001 0x0010 0x0014 0x0000 0x0143 0x0001 0x0001 0x0000 0x028F 0x2008 0x0105 0x00AA 0x005B 0xFA8C 0xFACC 0xFAEE 0x003C 0xFFA3 0xFFF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 04.01.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 Ответ

1 голос
/ 30 ноября 2010

Вот немного другой способ, который вы можете попробовать, используя 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 * 1 dates строк даты (которые можно преобразовать либо в порядковые номера даты , либо векторы даты ).
  • Массив N-by-23 decValues, содержащий преобразованные десятичные значения.Значения были преобразованы из диапазона от 0 до 65535 (т.е. 16-разрядное целое без знака) в -32768 до 32767 (16-разрядное целое число со знаком) с использованием дополнения до двух .
  • NЯчейка by-1 binValues, содержащая преобразованные двоичные значения.Каждая ячейка содержит строку символов размером 1 на 8, состоящую из нулей и единиц.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...