2015-10-02 198 views
1

我有INT 15(或字符串"15",這只是簡單),我需要用它來創造價值:使用十進制值以十六進制值

"\u0015" 

有一些轉換這會做到這一點?我不能這樣做:

"\u00" + myInt.ToString() 

因爲第一個文字是無效的。有沒有簡單的方法來獲得這個結果?

(如果你很好奇,這是與硬件設備,其中供應商有時表示整數值爲十六進制的整合。例如,我需要發送今天的日期到該設備作爲"\u0015\u0010\u0002"

回答

6

既然你要的21 Unicode代碼點,而不是15,你一定要以字符串「15」開頭。如果你試圖從15開始作爲int,你會發現你不能用任何涉及自動對焦的十六進制表示任何東西......

所以,給定「15」的最簡單的解析方法,十六進制可能是:

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

在此之後,你只需要轉換爲char

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

請注意,這隻會在基本多文種平面代碼點(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爲char:

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

的OP要U + 0015雖然不是U + 000F。這有點搞砸了...... –

+1

@JonSkeet:''這有點搞砸了......「 - 我們完全同意。供應商,但。你能做什麼? :) – David