2015-10-02 3 views
1

У меня есть INT 15 (или строка "15", это так же легко), и мне нужно, чтобы использовать его для создания ценности:Используйте десятичное значение как шестнадцатеричное значение

"\u0015" 

Есть некоторые преобразования что бы это сделать? Я не могу этого сделать:

"\u00" + myInt.ToString() 

Поскольку первый литерал недействителен. Есть ли простой способ получить этот результат?

(Если вам интересно, это для интеграции с аппаратным устройством, где продавец иногда выражающего целые значения в шестнадцатеричном формате. Например, я должен был бы отправить текущую дату на устройстве, как "\u0015\u0010\u0002".)

ответ

6

Учитывая, что вы хотите кодовую точку Юникода 21, а не 15, вы должны обязательно начать со строки «15». Если вы попытаетесь начать с 15 как int, вы обнаружите, что не можете выразить ничего с шестнадцатеричным представлением с участием AF ...

Итак, учитывая «15», самый простой способ разбора, :

string text = "15"; 
int codePoint = Convert.ToInt32(text, 16); 

После этого вам просто нужно бросить в char:

string text = "15"; 
int codePoint = Convert.ToInt32(text, 16); 
char character = (char) codePoint; 

Обратите внимание, что это будет работать только для точек кода в Basic Multilingual Plane (BMP) - т.е. U + 0000 до U + FFFF. Если вам нужно обрабатывать значения за что (например U+1F601), то вы должны использовать вместо char.ConvertFromUtf32:

string text = "15"; 
int codePoint = Convert.ToInt32(text, 16); 
string character = char.ConvertFromUtf32(codePoint); 
2

Литералы Unicode в строках разрешены во время компиляции, поэтому "\u00" + myInt.ToString() не работает (ToString() и конкатенация оцениваются во время выполнения).

Вы можете бросить Int обугливаться:

int unicodeCodePoint = 15; // or 21 
char c = (char)unicodeCodePoint; 
+2

ОП хочет U + 0015, хотя, не U + 000F. Это немного перепутано ... –

+1

@JonSkeet: '« Это немного испортилось ... »' - На этом мы полностью согласны. Продавцы. Что ты можешь сделать? :) – David

Смежные вопросы