这就是我想要做的事情:
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++;
}
任何帮助将不胜感激!
答案 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]);
}