簡體   English   中英

如何將長而長的ASCII十六進制值轉換為字符串?

[英]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
  • 您不考慮字節順序。
  • 您正在使用C函數,並在C ++中以C方式處理事務。 為什么不使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM