Следующий сделаю, с функцией Append4ByteInteger
делает фактическую работу:
#include <iostream>
#include <sstream>
#include <string>
static std::stringstream& Append4ByteInteger (std::stringstream& stream, int value) {
auto v = static_cast<uint32_t>(value);
stream << static_cast<unsigned char>(v >> 24);
stream << static_cast<unsigned char>(v >> 16);
stream << static_cast<unsigned char>(v >> 8);
stream << static_cast<unsigned char>(v);
return stream;
}
int main() {
std::stringstream message;
message.write((const char[]) {0x55}, 1);
Append4ByteInteger(message, 1);
std::cout << "result: '" << message.str() << "'" << std::endl;
}
Вы можете проверить, что поток на самом деле содержит 0x00 0x00 0x00 0x01
с помощью утилиты шестнадцатеричного (например, hexdump
).
Обратите внимание, что функция предполагает, что целое число имеет значение 0 или больше. Если вы хотите убедиться, что вы можете использовать вместо него unsigned int
или, возможно, даже uint32_t
, так как размер int зависит от платформы.
Почему вы хотите получить '0x55 0x00 0x00 0x00 0x01'? Вы уверены, что хотите рассматривать его как буфер байта вместо текстовой строки? Просто прошу убедиться, что –
Это может быть полезно (я не помечен как дубликат, потому что я честно не уверен): http://stackoverflow.com/questions/191757/c-concatenate-string-and-int –
'std :: string' не является' std :: stringstream', выяснить, как использовать 'std :: stringstream', легко, и ваш синтаксис составлен. Какую книгу вы используете? –