0

ある時点でフォーマットが失われ、次のような単一の長い文字列のように見える 16 進値の長い文字列があります。

Str1=
    001ba212c6b4001f162e9ab208004500003f1bdc40008011322ea9fe58a6a9fe0001c350c350002b0345001ba212c6b400007100be002c151300be0000000108000b000133ffffffffffffffff

オクテットを分離したい。オクテットが次のように分割された文字列ベクトルを取得できれば素晴らしいでしょう。

Str2=
    00 1b a2 12 ... 00 00 00

私が試した最も直感的なアプローチは、単一の文字を分離することに成功しましたが、単一の 16 進数値の代わりに、2 つの文字を返す 1 つの行ベクトルを生成します。

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

これはそれほど悪くはありませんが、改善される可能性があります。私が気付いていないアイデアや凝った機能はありますか?

4

1 に答える 1

2

最も簡単な方法は、文字列を 2 列の文字行列に再形成することです。

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

オクテット文字列をスペースで区切りたい場合は、sprintf代わりに次を使用できます。

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

sprintfStr1、一度に 2 文字を読み取り、インターリーブ スペースを追加します。最後の 2 文字は末尾のスペースを必要としないため、個別に連結されます。

于 2013-07-18T12:45:17.767 に答える