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

Convert emoji to hex number

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

有任何方法可以将其转换为: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

我希望现在更清楚了。

您必须执行以下操作:

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

请注意,您希望 Unicode 字符串处于 "big endian" 模式(因此 Encoding.BigEndianUnicode

不经过 Encoding 转换可能更容易:

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

(ushortchar 几乎是同一件事,但是 ushort 被构建为格式化为数字,而 char 被构建为格式化为一个字符)

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();
}