我有一长串十六进制值,在某些时候会丢失其格式,现在看起来像一个 long 字符串,例如:
Str1=
001ba212c6b4001f162e9ab208004500003f1bdc40008011322ea9fe58a6a9fe0001c350c350002b0345001ba212c6b400007100be002c151300be0000000108000b000133ffffffffffffffff
我想分开八位字节。获得一个字符串向量并将八位字节划分为如此:
Str2=
00 1b a2 12 ... 00 00 00
我尝试过的最直观的方法是将单个字符分开但不是单个十六进制值,而是产生一个带有两个字符的行向量:
for i=2:2:length(Str1)
Str2(i/2,1)=Str1(i-1);
Str2(i/2,2)=Str1(i);
end
输出结果为:
Str2=
00
1b
a2
12
..
这不是那么糟糕,但可能会更好。我不知道的任何想法或奇特的功能?
答案 0 :(得分:2)
最简单的方法是将字符串重塑为字符串的两列矩阵:
Str2 = reshape(Str1, 2, [])';
如果要使用空格分隔八位字符串,可以使用sprintf
代替:
Str2 = [sprintf('%c%c ', Str1(1:end - 2)), Str1(end - 1:end)];
sprintf
一次读取Str1
,两个字符,并添加交错空格。由于最后两个字符不需要尾随空格,因此它们是单独连接的。