Этот код неверен во многих отношениях, я не знаю, с чего начать ...
myBuffer
слишком мало, чтобы удерживать 8 chars
+ терминатор NUL, т.е. должно быть myBuffer[9]
.
sprintf
ожидает 8 аргументов, вы передаете только 1. Остальные обязательные аргументы будут находиться в стеке.
myLongLong
не является char
- Вы не учитываете порядок байтов.
- Вы используете функции C и делаете вещи C способом в C ++. Почему бы вам не использовать
std::string
s вместо строк в стиле C и stringstream
s как альтернативу sprintf
?
Ближайший почти рабочий пример того, что вы хотите, , как и ваш пример , выглядит примерно так:
#include <cstdio>
#include <iostream>
using namespace std;
int main(void)
{
char myBuffer[9];
long long myLongLong = 0x7177657274797569;
char *c_ptr = (char*)&myLongLong;
sprintf(myBuffer,"%c%c%c%c%c%c%c%c", c_ptr[0], c_ptr[1], c_ptr[2], c_ptr[3], c_ptr[4], c_ptr[5], c_ptr[6], c_ptr[7]);
int x;
cout<<myBuffer;
cin>>x;
return 0;
}
Который выдаст "iuytrewq"
на моей машине с прямым порядком байтов. Как я уже говорил, это не учитывает порядок байтов. Если машина работает с прямым порядком байтов, вы можете читать / распечатывать байты в обратном порядке.
Я действительно не понимаю, почему вы пытаетесь это сделать, хотя ...