我正在尝试使用格式说明符“%。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;
}
o / p:3c39653effff2f67ffff6262626241424344 对于这个扩展的ASCII字符¥和ÿ正在给出ffff和ffff。
请告诉我如何正确转换。
答案 0 :(得分:0)
如果我们使用unsigned char
对源字符串进行类型转换,问题就会解决:
sprintf(newBuffer+(2*i), "%02x", (unsigned char)buffer[i]);