Split string of hex shorts into cell values
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Bartosch Slomak
el 21 de Mzo. de 2017
Comentada: Guillaume
el 21 de Mzo. de 2017
I have a field from an ODBC connection where the data of a curve is stored in the following way:
- range for single value is signed 16bit (-32768 to 32767)
- representation in HEX 4 "digits" with padding left zeros (8000 to 7FFF)
- all values are concatenated to a string in the database
- no delimiters
- number of elements is string length/4
Example:
- Values (123, 456, -17000)
- String contains: "007B01C8BD98"
Now I would like to us this data inside Matlab.
I could prepare the data and create a translation database. But I would prefere a direct approach.
All string splitting operators make use of delimiters. But this does not work here.
What is the Matlab/Database Explorer way to get access to that data ? Are there any ready to use functions ?
0 comentarios
Respuesta aceptada
Guillaume
el 21 de Mzo. de 2017
Simply reshape the string into 4 columns, pass it through dec2hex and account for the fact that dec2hex assumes unsigned integer by casting from unsigned to signed:
s = '007B01C8BD98'; %demo data
typecast(uint16(hex2dec(reshape(s, 4, [])')), 'int16')
0 comentarios
Más respuestas (2)
Jan
el 21 de Mzo. de 2017
Based on Guillaume's solution:
typecast(uint16(sscanf(s, '%4x'), 'int16')
sscanf is much faster and nicer to convert hex to dec values.
1 comentario
ES
el 21 de Mzo. de 2017
One suggestion would be, since the width of each value is fixed, you can do something like this..
string = '007B01C8BD98ABCDEFA';%Example data
idx = 1:4:length(string);
for iloop=1:length(idx)-1
value(iloop) = hex2dec(string(idx(iloop):idx(iloop+1)-1))
end
2 comentarios
Guillaume
el 21 de Mzo. de 2017
You could avoid the loop entirely (see my answer), but if you're going to use a loop, you should at least predeclare value
value = zeros(1, numel(string)/4);
Clearly your code does not decode properly negative values.
Note that using string as a variable nam is not recommended in version >= R2016b, since it's now the name of a very useful class.
Ver también
Categorías
Más información sobre Characters and Strings en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!