我想將一些用MATLAB編寫的代碼移植到C中,這樣我就可以編譯該函數並更快地執行它(代碼非常頻繁地執行,並且會帶來顯着的速度提升)。如何使用sprintf寫入特定位置的C中的char數組?
所以基本上我的MATLAB代碼是這樣的,它需要一個矩陣並將其轉換爲字符串,並添加括號和逗號,以便我可以將其寫入文本文件。下面是如何做到這一點的矢量myvec會工作的一個想法:
MyVec = rand(1,5);
NbVal = length(MyVec)
VarValueAsText = blanks(2 + NbVal*30 + (NbVal-1));
VarValueAsText([1 end]) = '[]';
VarValueAsText(1 + 31*(1:NbVal-1)) = ',';
for i = 1:NbVal
VarValueAsText(1+(i-1)*31+(1:30)) = sprintf('%30.15f', MyVec(i));
end
現在,我怎麼能達到類似的結果在C 2這似乎並不困難,因爲我可以預先計算我的字符串(char數組)的大小,並且知道每個元素的位置,我需要寫入我的內存區域。另外,在C中存在sprintf
函數。但是,我很難理解如何設置它,也因爲我沒有一個可以通過反覆試驗很容易學習的環境(對於每次必須重新編譯的嘗試,通常都會導致到分割故障和MATLAB崩潰...)。
我希望有人能幫助,即使問題很可能看似微不足道,但我必須使用C的經驗非常少,我一直沒能找到合適的例子,從開始...
也許如果你向我們展示一些樣本輸入(例如:一個4 * 4矩陣),事情會更容易。 (你是否想使用磁盤上的文件作爲中間存儲,或者你想要一個內存中的接口嗎?)注意:在C中,sprintf()的第一個參數是結果應該放到的字符串/緩衝區,I不要指望matlab在這方面有很大的不同。注2:結果字符串中沒有顯示分隔符(空格,製表符,逗號,換行符)。 – wildplasser
嗨,感謝您的回覆!我不確定我是否理解你的評論,但是:我已經提出的代碼是MATLAB中的當前(工作)代碼,我試圖將它移植到C.實際上,我已經添加了第一行(隨機輸入)作爲示例輸入。最後,我在VarValuesAsString中獲得了我的「格式化值」... – Federico
我對mathlab沒有任何瞭解。它看起來好像你想要結果字符串是'[val1,val2,val3,...]'這是正確的嗎? – wildplasser