Кодирование UTF8 char в байтовую таблицу или формулу - PullRequest
0 голосов
/ 25 мая 2018

Здравствуйте, я хочу жестко закодировать значения некоторых символов 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 ]

0 голосов
/ 25 мая 2018

Для символов 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 - префикс)

0 голосов
/ 25 мая 2018

Символы, на которые вы ссылаетесь, не являются символами UTF-8.Так что они однобайтовые символы.(Обратите внимание, что UTF-8 использует только 2 байта для символов вне набора символов ASCII)

С учетом вышеизложенного вы можете просто привести их:

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...