如何将长长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
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"
。正如我提到的,这没有考虑到端序。如果机器是little-endian,那么你可以反向读取/打印字节。
我真的不明白你为什么要这么做…
你可以试试
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字符吗?
然后你需要遍历long long,每次提取一个字节,查看位移位和屏蔽。
提示从最后一个字节开始右移通常更容易(如果你知道长度)
或者-您可以将long-long记忆到字符数组中-除了任何字节排序问题
试试下面的代码。
#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;
}
相关文章:
- wcstombs_s(),转换字符串的长度
- 使用 CStringW/CStringA 和 CT2W/CT2A 转换字符串有什么区别?
- 无法转换字符串插入函数的参数
- 转换字符串向量:基于先前的值跳过元素
- 从中间器转换字符串不起作用,出了什么问题?
- 失败的证明转换字符串到枚举类
- 如何使用正则表达式和提升转换迭代器标记和转换 c 字符串
- 使用java jni时转换字符串类型
- 如何避免在转换字符串令牌流时重复istringstream构造
- 阿托伊未正确转换字符串
- C++,转换字符串,使连续下划线序列变为单个下划线
- 使用长算术转换字符串
- 转换字符串十进制数时的精度
- 将词法转换字符串提升为双精度
- 使用marshal_as函数转换字符串的性能
- C++不会从数据转换字符串
- 无论如何,在c++ /Qt中转换字符串到结构中的字段
- C++ 隐式类型转换字符串 -> int?
- 转换字符串到浮点数,c++实现
- 用于转换字符串大小写的函数