How to convert data byte by byte

30 ビュー (過去 30 日間)
Tayyaba Abro
Tayyaba Abro 2021 年 1 月 27 日
回答済み: Jan 2021 年 1 月 27 日
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
Jan 2021 年 1 月 27 日
Typing an answer would be easier, if the file or its contents is provided as text.

サインインしてコメントする。

採用された回答

Jan
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.
  2 件のコメント
Tayyaba Abro
Tayyaba Abro 2021 年 1 月 27 日
編集済み: Tayyaba Abro 2021 年 1 月 27 日
Actually I am taking data from wireshark in text format so it is showing like the picture that I have shared above. When taking data in pcap format it shows ASCII data but im unable to extract that
Jan
Jan 2021 年 1 月 27 日
編集済み: Jan 2021 年 1 月 27 日
Another option:
fid = fopen('packettext.txt', 'r');
if fid < 0, error('Cannot open file.'); end
bytes = fscanf(fid, '|%x', [1, inf]);
fclose(fid);

サインインしてコメントする。

その他の回答 (3 件)

David Hill
David Hill 2021 年 1 月 27 日
d=hex2dec(regexp(a,'[0-9a-f]+','match'));

Steven Lord
Steven Lord 2021 年 1 月 27 日
s = '|0|01|00|5e|'
s = '|0|01|00|5e|'
data = split(s, '|')
data = 6x1 cell array
{0×0 char} {'0' } {'01' } {'00' } {'5e' } {0×0 char}
d = hex2dec(data)
d = 6×1
0 0 1 0 94 0
If you want to eliminate the first and last 0 in d, trim the leading and trailing | characters from s before splitting.

Jan
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.

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by