2012-04-19 104 views
0

我在matlab中有一個雙精度數組,它的元素以十六進制格式輸出到一個文件中。我想輸出它沒有小數位,我似乎無法弄清楚當輸出的值是一個負數時如何做到這一點。我已經試過:十六進制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

我想回答,卻誤解了這個問題。現在爲什麼你需要輸出十六進制的'double'值? – 2012-04-19 03:14:21

+0

那麼他們實際上是所有的整數值。我只希望他們是整數,但我很確定它是一個雙打數組。四捨五入的效果會很好,但它不會。 – Dylan 2012-04-19 03:46:19

+0

在MATLAB File Exchange中查看[Two's Complement for MATLAB](http://www.mathworks.com/matlabcentral/fileexchange/5485-twos-complement-for-matlab)。根據定義, – zellus 2012-04-19 06:44:28

回答

1

您是否嘗試將value = -value;更改爲value = round(-value);

另外,輸出絕對值而已,但前面加上「 - 」如果該值爲負:

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

第二種方式有效,但絕對不理想。 – Dylan 2012-04-19 03:49:17

+0

如果您只需要一次輸出一個值,請將上面的代碼放入包裝函數hexprintf(val)中。我認爲你不可能找到更好的解決方案。 – 2012-04-20 13:36:28

相關問題