使用十进制值作为十六进制值

时间:2015-10-02 15:25:39

标签: c# hex decimal

我有int 15(或字符串"15",这很简单),我需要用它来创建值:

"\u0015"

是否有一些可以实现此目的的转换?我不能这样做:

"\u00" + myInt.ToString()

因为第一个文字是无效的。有没有一种简单的方法来获得这个结果?

(如果您有点好奇,这是为了与硬件设备集成,供应商有时会将整数值表示为十六进制。例如,我需要将今天的日期发送到设备为"\u0015\u0010\u0002"。)

2 个答案:

答案 0 :(得分:6)

鉴于您希望Unicode代码点为21而不是15,您绝对应该从字符串" 15"开始。如果您尝试以let filteredArray = editableStaticUserData.companies.filter { if let companyIdentifier = $0.companiesIdentifier, let companyIds = self.editableFilter?.companyIds, where companyIds.contains(companyIdentifier) { return true } } var matchedCompanyIds = Set(filteredArray) 作为15开头,您会发现您无法用涉及A-F的十六进制表示来表达任何内容...

所以,给出" 15"解析为十六进制的最简单方法可能是:

int

之后,您只需要转换为string text = "15"; int codePoint = Convert.ToInt32(text, 16);

char

请注意,这仅适用于基本多语言平面(BMP)中的代码点 - 即U + 0000到U + FFFF。如果您需要处理超出该值的值(例如U+1F601),那么您应该使用string text = "15"; int codePoint = Convert.ToInt32(text, 16); char character = (char) codePoint; 代替:

char.ConvertFromUtf32

答案 1 :(得分:2)

字符串中的Unicode文字在编译时被解析,这就是"\u00" + myInt.ToString()无法工作的原因(ToString()和连接在运行时进行评估)。

您可以将int强制转换为char:

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