Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Сравнение строк. Проблема с кодировкой ?  [new]
limarukraine
Member

Откуда:
Сообщений: 8
Доброго времени суток.

У меня с COM порта считывается строка. Потом я проверяю равна ли эта строка заданной. Однако даже если я ввожу только один символ и он правильно отображается при выводе в консоль (скрин прикреплен) то сравнение у меня false. В чем причина ? В кодировке ?

int count = port.BytesToRead;
            byte[] ByteArray = new byte[count];
            port.Read(ByteArray, 0, count);
            string s = System.Text.Encoding.UTF8.GetString(ByteArray, 0, ByteArray.Length);
            Console.WriteLine("Input string: {0}", s);
string s1 = "D";
            if (String.Compare(s, s1) == 0)
            {
                Console.WriteLine("Poradok: ");
            }                    
            else
            {
                Console.WriteLine("Bezporadok: ");
            };


Если я в программе задаю сравнение строк просто заданных (а не введенных с COM порта) то они определяются как одинаковые, то есть все нормально

string s2 = "D";
                       
            string s1 = "D";
            if (String.Compare(s2, s1) == 0)
            {
                Console.WriteLine("Poradok: ");
            }                    
            else
            {
                Console.WriteLine("Bezporadok: ");
            };


К сообщению приложен файл. Размер - 18Kb
3 мар 21, 13:04    [22288992]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
Не смотри в консоль. Посмотри в отладке, что лежит в s и s1, сравни длину

или Console.WriteLine((int)s[0]) например

Сообщение было отредактировано: 3 мар 21, 13:39
3 мар 21, 13:44    [22289029]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
limarukraine
Member

Откуда:
Сообщений: 8
Уже посмотрел - там D
3 мар 21, 13:46    [22289032]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
Чему равен count = port.BytesToRead;
3 мар 21, 13:46    [22289033]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22306
Сравни коды символов и длину строк

Сообщение было отредактировано: 3 мар 21, 13:40
3 мар 21, 13:47    [22289034]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
limarukraine
Member

Откуда:
Сообщений: 8
Konst_One
Чему равен count = port.BytesToRead;


Вроде 4
3 мар 21, 13:50    [22289037]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
смотри что в массиве, думаю там лишние символы
3 мар 21, 13:53    [22289041]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
fkthat
Member

Откуда:
Сообщений: 4643
Shocker.Pro
Сравни коды символов и длину строк

Может там какая-то "D с ударением" :)
3 мар 21, 15:02    [22289103]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6154
fkthat
Shocker.Pro
Сравни коды символов и длину строк

Может там какая-то "D с ударением" :)

Скорее всего в конце нулевые байты.
3 мар 21, 15:19    [22289114]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
fkthat
Member

Откуда:
Сообщений: 4643
limarukraine
Konst_One
Чему равен count = port.BytesToRead;


Вроде 4

Надо знать кодировку, что приходит с порта.
3 мар 21, 15:28    [22289125]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк. Проблема с кодировкой ?  [new]
fkthat
Member

Откуда:
Сообщений: 4643
limarukraine,

PS ~$ $NotD = [System.Text.Encoding]::UTF8.GetString(@(68, 0, 0, 0))
PS ~$ $NotD
D
PS ~$ $NotD.Length
4
PS ~$ $NotD.Equals('D')
False
3 мар 21, 15:35    [22289130]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить