![](/img/trans.png)
[英]How to convert a string to a long or another string of ascii values?
[英]How to convert long long ASCII hex values into a string?
我有一個long long
持有ASCII十六進制值,並想將其轉換為字符串。 我有以下代碼:
char myBuffer[8];
long long myLongLong = 0x7177657274797569;
sprintf(myBuffer,"%c%c%c%c%c%c%c%c",myLongLong);
int x;
cout << myBuffer;
cin >> x;
return 0;
十六進制代碼應為"qwertyui"
,但始終提供其他值。
我嘗試了%c
, %s
, %X
但是它沒有提供我需要的輸出,最接近的是%c
但它只打印出一個字符。
該代碼在很多方面是錯誤的,我不知道從哪里開始...
myBuffer
太小,無法容納8個chars
+ NUL終止符,即。 應該是myBuffer[9]
。 sprintf
期望有8個參數,而您只傳遞1。其他必需的參數將是堆棧中的所有參數。 myLongLong
不是一個char
std::string
而不是C風格的字符串和stringstream
替代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"
。 正如我提到的,這沒有考慮字節序。 如果機器是低位字節序,則可以反向讀取/打印字節。
我真的不明白您為什么要嘗試這樣做...
你可以試試
union { char buf[8]; long long num; } u;
u.num = 0x7177657274797569LL;
cout << u.str << endl;
但是我不明白你真正想做什么。 那么字節序呢?
使用字符串流
long long myLongLong = 0x7177657274797569;
std::stringstream ss;
ss << std::hex << myLongLong;
std::cout << ss << std::endl
您想將long-long的每個字節打印為ascii char嗎?
然后,您需要遍歷長而長的循環,一次提取一個字節,查看移位和屏蔽。
提示通常,從最后一個字節開始操作並向右移比較容易(如果您知道長度)
或者-您可以將long-long存入char數組-除了任何字節排序問題
請嘗試以下代碼。
#include <iostream>
using namespace std;
int main(void)
{
char myBuffer[8];
long long myLongLong = 0x7177657274797569;
for(int i = 0; i<8;i++)
{
myBuffer[i] = myLongLong>>(64-(i+1)*8);
}
cout<<myBuffer<<endl;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.