您好,我想将一些 utf 8 字符的值硬编码为字节。例如:'$', '-', '+';对于'$'如何由此计算字节值: symbol char octal code point binary code point binary utf8 $ U+0024 044 010 0100 00100100 此列中编码为字节的值是多少?public class Constants{ public const byte dollar= [value pick from where ?] public const byte minus= [pick value from where?]}我应该寻找上面的哪一列来编码一个字节?列值和字节值之间有什么公式char吗?
2 回答
不负相思意
TA贡献1777条经验 获得超10个赞
对于 ASCII 字符(0-127 范围内的字符),您可以简单地转换它们
public const byte dollar = (byte)'?';
除此以外:
public const byte dollar = 0x0024;
所以char列。删除U+并添加 0x。仅对 0x0000-0x007F 范围内的字符有效。
请注意,编译后的代码没有区别:sharplab:
public const byte dollar = (byte)'$';
public const byte dollar2 = 0x0024;
被编译为:
.field public static literal uint8 dollar = uint8(36)
.field public static literal uint8 dollar2 = uint8(36)
使用 C# 7.0,如果您讨厌这个世界并且想要混淆您的代码,您可以:
public const byte dollar = 0b00100100;
(他们添加了二进制文字,0b是前缀)
紫衣仙女
TA贡献1839条经验 获得超15个赞
您所指的字符不是 UTF-8 字符。所以它们是单字节字符。(注意 UTF-8 只对 ASCII 字符集以外的字符使用 2 个字节)
由于上述原因,您可以将它们转换为:
public const byte dollar = (byte)'$';
如果您需要以字节为单位的 UTF-8 字符,则应使用:
public static readonly byte[] trademark = new byte[] { 194, 153 };
或者,更明确,但对性能来说也是最差的:
public static readonly byte[] trademark = Encoding.UTF8.GetBytes("\u0099");
- 2 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消