扩展 ASCII 字符串转换为 Hex 格式

发布于 2024-12-20 22:32:25 字数 626 浏览 1 评论 0原文

我正在尝试使用格式说明符 "%.2X" 将输入 ascii 字符串转换为十六进制格式。我已将程序粘贴到下面,其作用相同。但是,这个程序在 Linux 服务器上运行,它给出了不正确的十六进制输出。

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main ()
{
char *buffer = "<9e>¥/gÿbbbbABCD";
char *newBuffer = new char[strlen(buffer)*2 + 1];
for(int i = 0; i< strlen(buffer); ++i)
{
    sprintf(newBuffer+(2*i), "%02x", buffer[i]); 
     //cout<<"\t"<<newBuffer;
}
  cout<<"\t"<<newBuffer;
  return 0;
}

输出:3c39653effff2f67ffff6262626241424344 对于此扩展 ASCII 字符 ¥ 和 ÿ 给出 ffff 和 ffff。

请告诉我如何正确转换。

I am trying to convert the input ascii string to hex format using the format specifier "%.2X" . I have pasted the program at below which does the same. But, this program works in Linux server its giving improper hex output.

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main ()
{
char *buffer = "<9e>¥/gÿbbbbABCD";
char *newBuffer = new char[strlen(buffer)*2 + 1];
for(int i = 0; i< strlen(buffer); ++i)
{
    sprintf(newBuffer+(2*i), "%02x", buffer[i]); 
     //cout<<"\t"<<newBuffer;
}
  cout<<"\t"<<newBuffer;
  return 0;
}

o/p: 3c39653effff2f67ffff6262626241424344
for this extended ASCII char ¥ and ÿ is giving ffff and ffff.

Please tell me how to convert properly.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

水溶 2024-12-27 22:32:25

如果我们使用 unsigned char 对源字符串进行类型转换,问题就得到解决:

sprintf(newBuffer+(2*i), "%02x", (unsigned char)buffer[i]);

If we typecast the source string with unsigned char, the problem gets solved:

sprintf(newBuffer+(2*i), "%02x", (unsigned char)buffer[i]);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文