2014-10-27 7 views
0

Я конвертирую строку UTF8 в целое число и наоборот. Если я ввожу 卐 в строку, он преобразуется в 21328. Но когда я пытаюсь преобразовать 21328 в строку, я получаю «PS».integer to utf8 string не работает C#

Я пробовал:

int dec = Convert.ToInt32(decimal1.Text, 10); 

byte[] bajti = new byte[4]; 
       bajti[0] = (byte)(dec >> 24); 
       bajti[1] = (byte)(dec >> 16); 
       bajti[2] = (byte)(dec >> 8); 
       bajti[3] = (byte)dec; 

znak1.Text = Encoding.UTF8.GetString(bajti); 

Я также попытался преобразования с использованием BitConverter и получил тот же результат. я подумал, что это может быть проблема с TextBox, и я попытался записал в блокноте, но получил тот же результат ...

+6

... почему вы входите в swastikas ... –

+0

Запуск вашей первой строки 'int dec = Convert.ToInt32 (« 卐 », 10);« Я получаю ошибку «Не удалось найти распознаваемые цифры». – gunr2171

+0

I должен был убедиться, что каждая строка utf8 преобразуется и пробовала все китайские и специальные символы вроде этого. – user2090925

ответ

0

Попробуйте это:

byte[] bajti = HexToBytes(hex1.Text); 
char c = 'a'; 
if (bajti.Length == 1) 
{ 
    c = (char)bajti[0]; 
} 
else if (bajti.Length == 2) 
{ 
    c = (char)((bajti[0] << 8) + bajti[1]); 
} 
else if (bajti.Length == 3) 
{ 
    c = (char)((bajti[0] << 16) + (bajti[1] << 8) + bajti[2]); 
} 
else if (bajti.Length == 4) 
{ 
    c = (char)((bajti[0] << 24)+(bajti[1] << 16) + (bajti[2] << 8) + bajti[3]); 
} 

znak1.Text = c.ToString(); 
0

Вы также можете попробовать следующее код:

// Conversion from String to Int32 
string text = "§"; 
byte[] textBytes = Encoding.UTF8.GetBytes(text); 
byte[] numberBytes = new byte[sizeof(int)]; 
Array.Copy(textBytes, numberBytes, textBytes.Length); 
int number = BitConverter.ToInt32(numberBytes, 0); 

//Conversion from Int32 to String 
numberBytes = BitConverter.GetBytes(number); 
text = Encoding.UTF8.GetString(numberBytes); 

PS: код будет работать, но некоторые символы, когда преобразованные занимают менее 4 байта в пространстве, поэтому при обратном преобразовании в строку из Int32 (4 байта), отставая \0 (которые не отображаются, поскольку они представляют нулевой символ ).