读取十六进制文件并追加字符串 matlab
Read Hex file and append string matlab
我正在 matlab 中读取 H.264 比特流作为 Hex 文件。我想在满足某些特定条件时插入一些字符串。
如附图所示,如果文件中的任何位置出现 00 00 00 01 的十六进制值,我想添加一些文件中 00 00 00 01 之前的字符串,如 ABC。字符串比较很简单,但是如何进行十六进制比较呢?
这是我将文件读取为十六进制文件的代码
f = fopen(theFile);
if f==-1
return
end
c = fread(f);
theSize=prod(size((c)));
c=sprintf('%02x\n',c);
c(3:3:end)='';
m=floor(length(c)/nChars);
hex='';
hex=reshape(c(1:m*nChars),nChars,m)';
if mod(length(c),nChars)
hex=strvcat(hex,c(m*nChars+1:end));
end
更具体地说,我希望将此 C 代码转换为 matlab
QByteArray data, basePattern;
basePattern.resize(3);
//start code:
basePattern[0] = (char) 0x00;
basePattern[1] = (char) 0x00;
basePattern[2] = (char) 0x01;
char end1 = 0x25, end2 = 0x45, end3 = 0x65;
x = myfile;//read using fopen
if (x == end1 || x == end2 {
}
十六进制值实际上只是整数:
x = uint8(hex2dec({'01', '02', '0A', '0B', '25', '45', '65', '00', '01', 'AA'}))
x =
1
2
10
11
37
69
101
0
1
170
而且可以直接比较:
x(3) == uint8(hex2dec('0a'))
ans =
1
所以把它们放在一起,你应该创建一个新的缓冲区并在字节中搜索模式,如果找到,插入你的数据,如果没有找到,只追加字节:
pat0 = uint8(hex2dec('00'));
pat1 = uint8(hex2dec('00'));
pat2 = uint8(hex2dec('01'));
pos = 1;
data = % the uint8 array read in from the file.
new_data = uint8([]);
while pos < length(data) - 2
if data(pos+0) == pat0 && data(pos+1) == pat1 && data(pos+2) == pat2
% insert new data buffer and append pattern
new_data = [new_data my_data_to_insert pat0 pat1 pat2];
pos = pos + 3;
else
% append
new_data = [new_data data(pos)];
pos = pos + 1;
end
end
% append last 2 bytes
new_data = [new_data data(end-1:end)];
我正在 matlab 中读取 H.264 比特流作为 Hex 文件。我想在满足某些特定条件时插入一些字符串。
如附图所示,如果文件中的任何位置出现 00 00 00 01 的十六进制值,我想添加一些文件中 00 00 00 01 之前的字符串,如 ABC。字符串比较很简单,但是如何进行十六进制比较呢?
这是我将文件读取为十六进制文件的代码
f = fopen(theFile);
if f==-1
return
end
c = fread(f);
theSize=prod(size((c)));
c=sprintf('%02x\n',c);
c(3:3:end)='';
m=floor(length(c)/nChars);
hex='';
hex=reshape(c(1:m*nChars),nChars,m)';
if mod(length(c),nChars)
hex=strvcat(hex,c(m*nChars+1:end));
end
更具体地说,我希望将此 C 代码转换为 matlab
QByteArray data, basePattern;
basePattern.resize(3);
//start code:
basePattern[0] = (char) 0x00;
basePattern[1] = (char) 0x00;
basePattern[2] = (char) 0x01;
char end1 = 0x25, end2 = 0x45, end3 = 0x65;
x = myfile;//read using fopen
if (x == end1 || x == end2 {
}
十六进制值实际上只是整数:
x = uint8(hex2dec({'01', '02', '0A', '0B', '25', '45', '65', '00', '01', 'AA'}))
x =
1
2
10
11
37
69
101
0
1
170
而且可以直接比较:
x(3) == uint8(hex2dec('0a'))
ans =
1
所以把它们放在一起,你应该创建一个新的缓冲区并在字节中搜索模式,如果找到,插入你的数据,如果没有找到,只追加字节:
pat0 = uint8(hex2dec('00'));
pat1 = uint8(hex2dec('00'));
pat2 = uint8(hex2dec('01'));
pos = 1;
data = % the uint8 array read in from the file.
new_data = uint8([]);
while pos < length(data) - 2
if data(pos+0) == pat0 && data(pos+1) == pat1 && data(pos+2) == pat2
% insert new data buffer and append pattern
new_data = [new_data my_data_to_insert pat0 pat1 pat2];
pos = pos + 3;
else
% append
new_data = [new_data data(pos)];
pos = pos + 1;
end
end
% append last 2 bytes
new_data = [new_data data(end-1:end)];