扩展的ASCII字符串转换为十六进制格式

时间:2011-12-14 09:17:01

标签: format char hex ascii

我正在尝试使用格式说明符“%。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。

请告诉我如何正确转换。

1 个答案:

答案 0 :(得分:0)

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

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