該代碼是錯誤在很多方面,我不知道從哪裏開始...
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;
}
哪樣我little-endian的機器上輸出"iuytrewq"
。正如我所提到的那樣,這沒有考慮到排列順序。如果機器是小端的,那麼你可以反過來讀/打印字節。
我真的不明白你爲什麼試圖這樣做,但...
謝謝,你的代碼工作,但逆轉:),如何扭轉它? 我想解密一個DES加密,我試圖優化我的代碼到最大。 – SKandeel
@SherifMaherEaid:在這個例子中,只是顛倒了'sprintf'的參數:'...,c_ptr [7],c_ptr [6],c_ptr [5],...,c_ptr [0]'。 – AusCBloke