How to convert 24-bit signed hex from .csv file to an array of decimal data?

15 visualizaciones (últimos 30 días)
The csv file has content like below, the hexical data is signed 24-bit and has 0x prefix:
============
DATA
0xfd22cc
0xfe89d1
0xff8d8b
0x004b41
0x00d9d5
0x0125fa
==============
I have a few challenges, not quite good with coding with Matlab:
1) How to get rid of 0x prefix?
2) How to convert the signed 24-bit hex to decimal?
I came up with a really ugly code to do the work, but would love to learn a elegant way:
%% Read in data
dat = readtable('demo.csv');
dat1 = table2array(dat(:,1));
out = strip(dat1,'left','0');
out = strip(out,'left','x');
out_dec = typecast(uint32(base2dec(out, 16)), 'int32');
for i=1:length(out_dec)
if out_dec(i) < 2^23
out_signed(i) = out_dec(i);
else
out_signed(i) = out_dec(i) - 2^24;
end
end

Respuesta aceptada

Jan
Jan el 23 de Jul. de 2019
dataTable = readtable('demo.csv');
data = table2array(dataTable(:,1));
data = strrep(data, '0x', '');
dataDec = base2dec(data, 16);
index = dataDec >= 2^23;
dataDec(index) = dataDex(index) - 2^24;
I prefer the faster sscanf to convert hex strings to decimals.
  2 comentarios
Guillaume
Guillaume el 23 de Jul. de 2019
Note that:
data = table2array(dataTable(:,1));
is simply:
data = dataTable{:, 1};
%or
data = dataTable.(1);
%or
data = dataTable.Data;

Iniciar sesión para comentar.

Más respuestas (1)

Guillaume
Guillaume el 23 de Jul. de 2019
Editada: Guillaume el 23 de Jul. de 2019
I agree with Jan that sscanf is nicer and for that reason:
dataTable = readtable('demo.csv');
dataDec = rowfun(@(s) sscanf(s, '%x'), dataTable, 'ExtractCellContents', true, 'OutputFormat', 'uniform')
dataDec(dataDec > 2^23) = dataDec(dataDec > 2^23) - 2^24;

Categorías

Más información sobre Data Type Conversion en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by