将表情符号转换为十六进制数
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")));
(ushort
和 char
几乎是同一件事,但是 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();
}
我正在尝试将表情符号转换为十六进制数字或字符串。
有任何方法可以将其转换为: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")));
(ushort
和 char
几乎是同一件事,但是 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();
}