2012-04-19 16 views
0

matlabに要素が16進形式のファイルに出力されているdouble配列があります。小数点以下の桁数で出力したいので、出力される値が負の数であるときにこれを行う方法を理解できないようです。私が試した:誤った形式のMatlab出力がありません

>> A = ones(1,4); 
    >> fid = fopen('test.txt', 'r'); 
    >> value = A(2); 
    >> fid = fopen('test.txt', 'w'); 
    >> fprintf(fid,'%x\r\n', value); 
    >> fprintf(fid,'%.0x\r\n', value); 
    >> value = -value; 
    >> fprintf(fid,'%.0x\r\n', value); 
    >> fprintf(fid,'%0.0x\r\n', value); 
    >> fprintf(fid,'%0.0x\r\n', value); 
    >> fprintf(fid,'%1.0x\r\n', value); 
    >> fprintf(fid,'%x\r\n', value); 

し、出力ファイルには、次のようになります。

1 
    1 
    -1e+000 
    -1e+000 
    -1e+000 
    -1e+000 
    -1.000000e+000 

私は本当にただプリントアウトできるようにしたい「-1」;

申し訳ありませんが、これは明らかですが、非常に多くの異なるフォーマットがあるので、この情報を見つけるのは本当に難しいです。

+0

は私が答えることを試みたが、質問を誤解。なぜ、二重値を16進数で出力する必要がありますか? –

+0

これは実際にはすべて整数値です。私はそれらを整数にしたいだけですが、それは2倍の配列であると確信しています。それがうまくいくと丸めはうまくいくが、そうはしない。 – Dylan

+0

MATLAB File Exchangeの[Two's Complement for MATLAB](http://www.mathworks.com/matlabcentral/fileexchange/5485-twos-complement-for-matlab)をご覧ください。 – zellus

答えて

1

value = -value;value = round(-value);に変更してみましたか?

また、出力絶対値だけではなく、先頭に追加「 - 」の値が負の場合:

if value < 0, 
    fprintf('-%x', abs(value)); 
else 
    fprintf('%x', abs(value)); 
end 
+0

2つ目の方法は機能しますが、それは理想的ではありません。 – Dylan

+0

一度に1つの値だけを出力する必要がある場合は、上のコードをwrapper関数hexprintf(val)に入れてください。私はあなたがより良い解決策を見つける可能性が高いとは思わない。 –

関連する問題