在MatLab中以十六进制字符串分隔八位字节

时间:2013-07-18 12:34:29

标签: string matlab hex

我有一长串十六进制值,在某些时候会丢失其格式,现在看起来像一个 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 
    ..

这不是那么糟糕,但可能会更好。我不知道的任何想法或奇特的功能?

1 个答案:

答案 0 :(得分:2)

最简单的方法是将字符串重塑为字符串的两列矩阵:

Str2 = reshape(Str1, 2, [])';

如果要使用空格分隔八位字符串,可以使用sprintf代替:

Str2 = [sprintf('%c%c ', Str1(1:end - 2)), Str1(end - 1:end)];

sprintf一次读取Str1,两个字符,并添加交错空格。由于最后两个字符不需要尾随空格,因此它们是单独连接的。