2016-09-05 4 views
-1

Die folgende Funktion gibt einen char * zu konvertieren.Wie char * std :: string

template<class ...Args> 
    bool write(Args&&... recordArgs) { 
    auto const currentWrite = writeIndex_.load(std::memory_order_relaxed); 
    auto nextRecord = currentWrite + 1; 
    if (nextRecord == size_) { 
     nextRecord = 0; 
    } 
    if (nextRecord != readIndex_.load(std::memory_order_acquire)) { 
     new (&records_[currentWrite]) T(std::forward<Args>(recordArgs)...); 
     writeIndex_.store(nextRecord, std::memory_order_release); 
     return true; 
    } 

    // queue is full 
    return false; 
    } 

kann Funktionen nicht ändern. Die u_char * pfring_zc_pkt_buff_data gibt einen Zeiger auf das tatsächliche Paket zurück, das von pfring_zc_recv_pkt(zq, &buffers[lru], 1) erfasst wird.

Ich muss einen Teil des Pakets in einen Puffer speichern. Ich muss char * string * .Es gibt viele ähnliche Fragen wie konvertieren:

How to Convert unsigned char* to std::string in C++?

How to convert a const char * to std::string

How to convert char to string?

nicht finden die richtige Antwort für meine Frage.

hier sind einige meiner Code.

void run() { 
    int i=0,n; 
    char buf[_snapLengthConnection + _ConnectionHeaderSize];  
    for(;;){ 
     if(likely(pfring_zc_recv_pkt(zq, &buffers[lru], wait_for_packet)>= 0)) {    
      u_char *pkt_data = pfring_zc_pkt_buff_data(buffers[lru], zq);   
      pfring_print_pkt(buf, sizeof(buf), pkt_data, buffers[lru]->len,sizeof(buf));  

      std::string *payload; 

      //need to save buf to payload 
      // how do i copy buf to payload?    
      std::cout<< payload<<"=="<<std::endl;    

      _activeBuffer->queue->write(payload);  
      lru++; lru &= NBUFFMASK;    
     } 
    } 
    LOG_INFO("capture_loop for connections: Exiting");   

} 

Wie kann char * in eine Zeichenfolge umgewandelt werden?

OS: UBUNTU gcc Version: 4.8.2

+1

Was meinst du mit 'std :: string *'? – Shravan40

+0

@ Shravan40. Die Frage ist bearbeitet –

+0

@ m.r226 Kennen Sie die Länge der Daten? –

Antwort

1

std::string hat einen Konstruktor für diese:

const char *str = "Shravan Kumar"; 
std::string str(str); 

So stellen Sie sicher, dass Ihr char * nicht NULL ist, sonst wird es zu undefinierten Verhalten führen .

+0

char * ist nicht NULL, ich kann den Inhalt ausdrucken. Getestet vorher. –

+0

Dies funktioniert nur für C-Style-Strings, die seine Paketdaten nicht sind. Wie würde der Konstruktor von 'str' die Länge der Paketdaten kennen? –

Verwandte Themen