Расширенная строка символов ASCII конвертируется в шестнадцатеричный формат - PullRequest
1 голос
/ 14 декабря 2011

Я пытаюсь преобразовать входную строку ascii в шестнадцатеричный формат, используя спецификатор формата "% .2X". Я вставил программу ниже, которая делает то же самое. Но эта программа работает на сервере 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-символа ¥, а giving дает ffff и ffff.

Подскажите пожалуйста, как правильно конвертировать.

1 Ответ

0 голосов
/ 23 декабря 2011

Если мы приведем исходную строку к unsigned char, проблема будет решена:

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