Я заметил странное поведение, символы выше 127 не будут правильно преобразовываться в байт. Это хорошо известная проблема, но я не могу понять, почему это происходит. Я узнал об этом, когда работал над приложением клиент-сервер. Дело в том, что символы не подписаны, как и байты, поэтому где потеря данных
public class Constants
{
public constant char TOP3_REQUEST_CODE = (char)148;
}
public void printTopThree()
{
string request = Constants.TOP3_REQUEST_CODE.ToString();
string response = SendAndRecive (Constants.PORT, Constants.IP, request, Globals.SOCKET);
//The rest isn't relevant.
public string SendAndRecive(string port, string ip, string request, Socket socket)
{
Byte[] bytesSend = Encoding.ASCII.GetBytes(request);
Console.WriteLine(request [0]);
Console.WriteLine(bytesSend[0]);
//The program continues but its not relevant.
}
Код после этого не меняет байтовый массив или строку, поэтому он не может повлиять на результаты.
Вывод:
148
63
Первый символ в запросе - это код сообщения (бывает 148), но после преобразования первый байт равен 63.
Мои вопросы:
1. Как я могу это исправить? Есть ли какая-то другая кодировка, которая может решить мою проблему?
2. Почему это происходит в любом случае?
РЕДАКТИРОВАТЬ: запрос выглядит так (в целом):
1-й байт: (символ) код (20 100 148 и т. Д.)
2 - 4 байта: (int) длина (длина объекта JSON, длина может быть 1, 2 или 3 байта)
5-й - X байт: (символ) JsonObject (преобразован в символ [])
Спасибо за ваше время и внимание
- Anthon