连接整数来制作一个字符串

时间:2011-02-14 18:44:41

标签: c++

这就是我想要做的事情:

int x = 0;
char toBuffer;
while (twenty_byte_buffer[x] != '\0') // While the string isn't at the end...
{
cout << int(twenty_byte_buffer[x]); // show me, works fine

//need to concat the int values from above into toBuffer as a string
//eg. "-62-8711097109" would have derived from this "©nam"

//this doesn't work:
//strcat ( toBuffer, reinterpret_cast<*????*>(twenty_byte_buffer[x]) );

x++;
} 

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:8)

使用stringstream。它就像cout

一样工作
stringstream sstr;
while (twenty_byte_buffer[x] != '\0')
{
    sstr << int(twenty_byte_buffer[x]);
    x++;
}

string result = sstr.str();

答案 1 :(得分:2)

最简单的选择是std::stringstream

#include <sstream>
#include <iostream>
using namespace std;

int main(){
    stringstream numbers;
    for(int i=0; i < 10; ++i){
        numbers << i;
    }
    cout << numbers.str() << endl; // prints "0123456789"
}

答案 2 :(得分:0)

#include<sstream>

std::stringstream sout;
while (twenty_byte_buffer[x] != '\0') // While the string isn't at the end...
{
   cout << int(twenty_byte_buffer[x]); // show me, works fine

   sout << int(twenty_byte_buffer[x]); //concatenating into stringstream!

    x++;
} 

std::string str = sout.str(); //get the string value!
cour << str ;

答案 3 :(得分:0)

正确答案取决于twenty_byte_buffer内的真实内容。

如果twenty_byte_buffer中的值是表示整数的ASCII字符(值为'0'到'9',包括'),那么Daniel Gallagher发布的字符串流解决方案需要稍微修改,删除(int)演员:

stringstream sstr;
int x = 0;
while (twenty_byte_buffer[x] != '\0')
{
    // Note no cast to int here...
    sstr << twenty_byte_buffer[x];
    x++;
}

string result = sstr.str();

但是如果缓冲区中的字节表示二进制整数(具有值[-128-127],包括值),则while条件似乎是错误的:循环将退出第一个0值遇到了! (要使用无符号整数,在[0 - 255]范围内,将强制转换更改为(unsigned int)。)

顺便说一句,你的char toBuffer解决方案不起作用的原因有两个:

1)您需要使用字符数组,而不是单个字符。例如,您可以将toBuffer声明为char toBuffer[100](然后确保至少将第一个char初始化为'\0'。)

2)如果字节表示二进制值([0..255]范围内的无符号整数或[-128..127]范围内的整数),strcat仍将失败。您需要一个将这些值转换为二进制表示的调用。一种方法是使用非标准但通常支持的itoa调用:

char toBuffer[100];
int x = 0;
int y = 0;

// I think we still need a different terminating condition...
while (twenty_byte_buffer[x] != '\0') {
    itoa(bytes[x], &toBuffer[y], 10));
    y += strlen(&toBuffer[y]);
}