2015-09-22 27 views
2

我環顧四周,我一直無法找到解決方案來存儲從boost格式返回到char數組中的內容。例如:Boost ::帶char數組的格式

#include "stdafx.h" 
#include <iostream> 
#include <boost/format.hpp> 

int main() 
{ 
    unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D }; 
    char buf[1024]; 
    buf[] = boost::format("%02X-%02X-%02X-%02X-%02X") // error on this line 
     % arr[0] 
     % arr[1] 
     % arr[2] 
     % arr[3] 
     % arr[4]; 
    system("pause"); 
    return 0; 
} 

我得到的錯誤:

錯誤:預期的表達

我不知道,如果我只是俯瞰簡單的解決方案,但我需要一個const char *作爲回報。有大量的代碼現在不能被重寫。我正在VS2013 C++

+0

'boost :: format'的返回類型是什麼? –

回答

1

您可以使用array_sink從升壓輸入輸出流:

Live On Coliru

#include <iostream> 
#include <boost/format.hpp> 
#include <boost/iostreams/device/array.hpp> 
#include <boost/iostreams/stream.hpp> 

namespace io = boost::iostreams; 

int main() 
{ 
    unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D }; 
    char buf[1024]; 

    io::stream<io::array_sink> as(buf); 

    as << boost::format("%02X-%02X-%02X-%02X-%02X") 
     % arr[0] 
     % arr[1] 
     % arr[2] 
     % arr[3] 
     % arr[4]; 


    // to print `buf`: 
    std::cout.write(buf, as.tellp()); 
} 

打印

05-04-AA-0F-0D 
+0

我一直沒有能夠得到這個工作。我有兩個函數說... int Add(const char * pchar)和void Fix(char * pchar),我需要傳遞buf。 – pistachiobk

+0

是什麼問題?在你的問題中爲什麼不是**?當你意識到你應該問別的問題或者現在有新的問題時,請打開一個新問題。這工作。你有一個[現場演示](http://coliru.stacked-crooked.com/a/5d6db2145c7c47f7) – sehe

+0

明天我會發布更新的問題。就目前而言,我看到這個問題適用於最初提出的問題,並且會接受它。謝謝。 – pistachiobk

0

您可以使用C++ Format作爲更快的替代Boost格式。它允許直接格式化成一個字符陣列:

#include "format.h" 

int main() 
{ 
    unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D }; 
    char buf[1024]; 
    fmt::ArrayWriter writer(buf); 
    writer.write("{:02X}-{:02X}-{:02X}-{:02X}-{:02X}", 
       arr[0], arr[1], arr[2], arr[3], arr[4]); 
} 

,或者甚至更好,它可以自動分配陣列(在此情況下它將被完全堆棧分配所以相比於固定的緩衝器中沒有性能損失):

#include "format.h" 

int main() 
{ 
    unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D }; 
    fmt::MemoryWriter writer; 
    writer.write("{:02X}-{:02X}-{:02X}-{:02X}-{:02X}", 
       arr[0], arr[1], arr[2], arr[3], arr[4]); 
} 

該庫使用類似Python的格式字符串語法,但也提供了安全的printf實現。

免責聲明:我是這個圖書館的作者。