How to convert data byte by byte
30 ビュー (過去 30 日間)
古いコメントを表示
I have read a file and data im getting is shown below. I have to convert this data byte by byte in decimal number please tell me how can I do that ?
2 件のコメント
Jan
2021 年 1 月 27 日
Typing an answer would be easier, if the file or its contents is provided as text.
採用された回答
Jan
2021 年 1 月 27 日
編集済み: Jan
2021 年 1 月 27 日
Do you really mean byte by byte? The variable read conatins 16 bit characters of the text as unicode, so a byte by byte conversion is:
read = '|0|01|00|5e|'
typecast(uint16(read), 'uint8')
The original text might be a ASCII text, then import it as bytes directly:
fid = fopen('packettext.txt', 'r');
if fid < 0, error('Cannot open file.'); end
bytes = fread(fid, inf, '*uint8');
fclose(fid);
Maybe you want to import the numbers and convert them from hex to decimal?
S = fileread('packettext.txt');
values = sscanf(S, '|%x', [1, inf]);
To clarify this, please post an example with input data and the wanted output.
その他の回答 (3 件)
Steven Lord
2021 年 1 月 27 日
s = '|0|01|00|5e|'
data = split(s, '|')
d = hex2dec(data)
If you want to eliminate the first and last 0 in d, trim the leading and trailing | characters from s before splitting.
0 件のコメント
Jan
2021 年 1 月 27 日
A comparison of the runtimes:
s = repmat('|0|01|00|5e', 1, 2000);
tic
for k = 1:100
d = hex2dec(regexp(s, '[0-9a-f]+', 'match'));
end
toc
tic
for k = 1:100
d = hex2dec(split(s, '|'));
end
toc
tic
for k = 1:100
d = sscanf(s, '|%x');
end
toc
tic
for k = 1:100
d = sscanf(strrep(s, '|', ' '), '%x');
end
toc
% Elapsed time is 0.909770 seconds.
% Elapsed time is 0.424414 seconds.
% Elapsed time is 0.272269 seconds.
% Elapsed time is 0.163054 seconds.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Data Type Conversion についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!