【问题标题】:Convert emoji to hex number将表情符号转换为十六进制数字
【发布时间】:2015-09-27 20:01:01
【问题描述】:

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

有什么办法可以转换这个????在此: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

我希望现在更清楚。

【问题讨论】:

  • 您能说得更具体些吗?有明显的解决方案,比如转换文件名或哈希,但我想你已经考虑过了?

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


【解决方案1】:

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

【讨论】:

  • 欢迎来到 StackOverflow。请不要在没有解释的情况下发布代码。请与我们分享您的想法,为什么您认为您提出的解决方案可能对 OP 有所帮助。
【解决方案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 被构建为格式化为字符)

【讨论】:

  • @frenk91 你必须对它进行基准测试...我没有为 Windows 手机编程,也没有其中之一。
  • 我对 2 方法进行了基准测试,最快的方法是使用编码
猜你喜欢
  • 2020-12-15
  • 2017-03-27
  • 1970-01-01
  • 2015-02-01
  • 2017-06-23
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
相关资源
最近更新 更多