如何将char *转换为std :: string

时间:2016-09-05 05:12:17

标签: c++ casting stdstring

以下函数返回char *:

 // Returns the pointer to the actual packet data.
 // @param pkt_handle The buffer handle.
 // @param queue      The queue from which the packet is arrived or destined.
 // @return           The pointer on success, NULL otherwise.
u_char * pfring_zc_pkt_buff_data(
  pfring_zc_pkt_buff *pkt_handle,
  pfring_zc_queue *queue
);

并且以下函数将字符串作为输入。

  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;
  }

我无法更改功能代码。 u_char * pfring_zc_pkt_buff_data返回指向由pfring_zc_recv_pkt(zq, &buffers[lru], 1)捕获的实际数据包的指针。

我需要将部分数据包保存到缓冲区,所以我必须将u_char *转换为字符串* 有许多类似的问题,如:

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?

我的问题找不到合适的答案。

这是我的一些代码。

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);    
        } 
     }

}

如何将u_char *转换为字符串?

操作系统:Ubuntu

gcc版本:4.8.2

1 个答案:

答案 0 :(得分:4)

std::string有一个构造函数:

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

请确保您的char *不是NULL,否则会导致未定义的行为。