将表情符号转换为十六进制数

时间:2015-07-09 12:30:59

标签: c# windows-runtime windows-phone-8.1

我正在尝试将表情符号转换为十六进制数字或字符串。

有任何方法可以将此转换为:0x00000000D83DDC71L或D83DDC71

修改

我的代码是:

var bytes = Encoding.UTF8.GetBytes(emoji.ToString()); //emoji is 
var number = BitConverter.ToUInt32(bytes, 0); //number is 2610470896
var emojiCode = unicode.ToString("X"); // emojiCode is 9B989FF0

问题是我需要我的emojiCode为D83DDC71

我希望现在更清楚了。

2 个答案:

答案 0 :(得分:2)

您必须执行以下操作:

var str = "\uD83D\uDC71";
string res = BitConverter.ToString(Encoding.BigEndianUnicode.GetBytes(str)).Replace("-", "");

请注意,您希望Unicode字符串处于“大端”模式(因此Encoding.BigEndianUnicode

如果不经过Encoding转换,可能会更轻松:

string res = string.Concat(str.Select(x => ((ushort)x).ToString("X4")));

ushortchar几乎相同,但ushort构建为格式化为数字,而char构建为格式化为字符)

答案 1 :(得分:0)

Emoji Unicode不是单个十六进制数字,它只能通过UTF32进行编码。 因此您可以像这样分割它:

byte[] utfBytes = System.Text.Encoding.UTF32.GetBytes("?");
print(utfBytes.Length);
for (int i = 0; i < utfBytes.Length; i += 4)
{
     if (i != 0) result += '-';
     result += System.BitConverter.ToInt32(utfBytes, i).ToString("x2").ToUpper();
}