2011-12-14 13 views
1

フォーマット指定子 "%2!"を使用して、入力ASCII文字列を16進形式に変換しようとしています。私は同じことをする以下のプログラムを貼り付けました。しかし、このプログラムは、Linuxサーバで正しく動作しません。拡張ASCII文字列が16進形式に変換されます

#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:この拡張ASCII文字の¥とYの3c39653effff2f67ffff6262626241424344 はFFFFとFFFFを与えています。

正しく変換する方法を教えてください。

答えて

0

我々はunsigned charで元の文字列を型キャストした場合、問題が解決します:

sprintf(newBuffer+(2*i), "%02x", (unsigned char)buffer[i]); 
関連する問題