Member 11721323 Ответов: 2

Оператор ( - ) не определен для типов 'char' и integer


Здравствуйте, у меня есть несколько кодов на c#, которые я преобразовал в vb, а затем он выдает эту ошибку, говоря
operator (-) is not defined for types 'char' and integer 
и это прекрасно работает в c#.

вот код C# и VB кода
else if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'))
                {
                    // get the character's value
                    byte v = (byte)(c - 0x30);
                    if (c >= 'A' && c <= 'F') v = (byte)(c + 0x0a - 'A');
                    if (c >= 'a' && c <= 'f') v = (byte)(c + 0x0a - 'a');

                    if (gotFirstChar == false)
                    {
                        gotFirstChar = true;
                        accum = v;
                    }


в vb это преобразованный код

ElseIf (c >= "0"c AndAlso c <= "9"c) OrElse (c >= "A"c AndAlso c <= "F"c) OrElse (c >= "a"c AndAlso c <= "f"c) Then
                   ' get the character's value
                   Dim v As Byte = CByte(c - &H30)
                   If c >= "A"c AndAlso c <= "F"c Then
                       v = CByte(c + &HA - "A"c)
                   End If
                   If c >= "a"c AndAlso c <= "f"c Then
                       v = CByte(c + &HA - "a"c)
                   End If

                   If gotFirstChar = False Then
                       gotFirstChar = True
                       accum = v


Что я уже пробовал:

ElseIf (c >= "0"c AndAlso c <= "9"c) OrElse (c >= "A"c AndAlso c <= "F"c) OrElse (c >= "a"c AndAlso c <= "f"c) Then
                   ' get the character's value
                   Dim v As Byte = CByte(c - &H30)
                   If c >= "A"c AndAlso c <= "F"c Then
                       v = CByte(c + &HA - "A"c)
                   End If
                   If c >= "a"c AndAlso c <= "f"c Then
                       v = CByte(c + &HA - "a"c)
                   End If

                   If gotFirstChar = False Then
                       gotFirstChar = True
                       accum = v

Jochen Arndt

Я отредактировал этот вопрос, потому что весь вид страницы был испорчен некоторыми HTML-тегами в разделе "Что я пробовал".

2 Ответов

Рейтинг:
5

F. Xaver

Что операции <= etc-это не ваша проблема, они прекрасно работают с char. (Решение 1)

CByte(c + &HA - "A"c)

Это твоя проблема.. вы пытаетесь вычислить что-то типа Char с целым числом.
Интересно, что ты вообще пытаешься архивировать? конечно... для получения целого числа шестнадцатеричного числа ... они уже есть .Чистые функции

Dim i As Integer = Integer.Parse("12FF", Globalization.NumberStyles.HexNumber)

i = & gt; 4863


Рейтинг:
0

Mehedi Shams

Привет Member 11721323,

Вместо того, чтобы использовать "А" С, "А"С и т. д., use Asc("A").

Напр.:

ElseIf (c >= Asc("0") AndAlso c <= Asc("9")) OrElse ......................
.........................................................................
Это происходит потому, что в C# символьные типы автоматически приводятся неявно, в VB.NET требуется явное приведение (преобразование, если быть точным). Asc преобразует символ в его ASCII-эквивалент.


Richard MacCutchan

В ваших ответах нет необходимости использовать жирный текст.

Jochen Arndt

Это было вызвано некоторыми HTML-тегами в самом вопросе, которые испортили весь вид страницы (и смешали некоторый код).

Richard MacCutchan

Спасибо, надо было присмотреться повнимательнее.

Member 11721323

я пробовал то, что вы сказали, мистер мехеди Шамс, но он все равно возвращает ошибку, говоря, что оператор (<=) не определен для типов 'char' и integer