Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Помогите с C# Добавлено: 14.01.12 01:38  

Автор вопроса:  Ahtoxa
Подскажите пожалуйста как перевести эти 2 куска с C# на VB.NET
a += (uint)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));

и
b ^= a << 10;

Ответить

  Ответы Всего ответов: 29  

Номер ответа: 1
Автор ответа:
 Ahtoxa



Вопросов: 6
Ответов: 29
 Профиль | | #1 Добавлено: 14.01.12 02:27
со вторым куском разобрался
  1. b ^= a << 10;

будет так
  1. b = b Xor a << 10


А вот с первым никак не пойму. uint - это понятно, на бейсике так будет CType(x, UInteger)
Вот немогу понять что это "[k + 1] << 8"
У меня ругается на такой вариант:
  1. a = a + CType((url(k + 1) << 8), UInteger)

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 14.01.12 02:38
всего навсего прибавление к /а/ четырехбайтного числа лежащего со смещение /k/ в массиве /url/.
и на что ругается? вообще url и k объявлены?

Ответить

Номер ответа: 3
Автор ответа:
 Ahtoxa



Вопросов: 6
Ответов: 29
 Профиль | | #3 Добавлено: 14.01.12 02:42
Operator '<<' is not defined for types 'Char' and 'Integer'.

url As String
k As Integer

Вот весь код на C# http://snipplr.com/view/48906/

Подскажите как перевести такое?
  1. a += (uint)(url[k + 1] << 8);

Ответить

Номер ответа: 4
Автор ответа:
 Ahtoxa



Вопросов: 6
Ответов: 29
 Профиль | | #4 Добавлено: 14.01.12 02:47
Вот как я перевёл объявление переменных:
  1. Private Shared Function GoogleChecksum(ByVal url As String) As String
  2.         Dim GoogleMagic As UInteger = 3862272608
  3.         Dim b As UInteger
  4.         Dim a As UInteger
  5.         Dim c As UInteger = GoogleMagic
  6.         b = 2654435769
  7.         a = 2654435769
  8.         Dim k As Integer = 0
  9.         Dim length As Integer = url.Length
  10.         'Algorithm
  11.  
  12.         While (length >= 12)
  13.             a = a + CType((url(k + 1) << 8), UInteger)
  14.             ...

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #5
Добавлено: 14.01.12 02:55
да я и сам нашел похожий код) http://forums.asp.net/t/1714572.aspx
Суть в том, что нельзя применять оператор сдвига между символом (char) и интеджером. Vb.net в глаза не видел, но я бы попробовал так
  1. a = a + Asc(url(k + 0)) + (Asc(url(k + 1)) << 8) + (Asc(url(k + 2)) << 16) + (Asc(url(k + 3)) << 24)

как я понимаю более канонично вместо Asc использовать Convert.ToInt32(Char), и может даже малость быстрее

Ответить

Номер ответа: 6
Автор ответа:
 Ahtoxa



Вопросов: 6
Ответов: 29
 Профиль | | #6 Добавлено: 14.01.12 14:10
  1. a += Asc(url(k + 0)) + (Asc(url(k + 1)) << 8) + (Asc(url(k + 2)) << 16) + (Asc(url(k + 3)) << 24)

Arithmetic operation resulted in an overflow.

Хелп)))

Ответить

Номер ответа: 7
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #7
Добавлено: 14.01.12 21:47
мой режим телепата говорит, что Аск выдаёт знаковый интегер, что вкупе со сдвигом этого числа влево на три октета (<<24) бесславно заканчивается переполнением. Попробуйте вместо Asc использовать Convert.ToUInt32(..)

Ответить

Номер ответа: 8
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 14.01.12 21:50
либо тупо в /а/ не влезает получившееся значение и надо юзать uint64

Ответить

Номер ответа: 9
Автор ответа:
 Ahtoxa



Вопросов: 6
Ответов: 29
 Профиль | | #9 Добавлено: 14.01.12 22:09
  1. a += Convert.ToInt32(url(k + 0)) + (Convert.ToInt32(url(k + 1)) << 8) + (Convert.ToInt32(url(k + 2)) << 16) + (Convert.ToInt32(url(k + 3)) << 24)

Arithmetic operation resulted in an overflow.

Во время ошибки a=2654435769, k=0 т.е. цикл даже и раз не отрабатывает.

Ответить

Номер ответа: 10
Автор ответа:
 Ahtoxa



Вопросов: 6
Ответов: 29
 Профиль | | #10 Добавлено: 14.01.12 22:11
"Arithmetic operation resulted in an overflow." и при "Convert.ToInt32" и "Convert.ToUInt32"

Ответить

Номер ответа: 11
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #11
Добавлено: 14.01.12 22:16
  1. a += DirectCast((url(k + 0) + (url(k + 1) << 8) + (url(k + 2) << 16) + (url(k + 3) << 24)), UInteger)

если языка не знаешь то есть конвертеры в нете.

Ответить

Номер ответа: 12
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #12
Добавлено: 14.01.12 22:18
или так
  1. a = (a + CType((url((k + 0))  _
  2.             + ((url((k + 1)) + 8)  _
  3.             + ((url((k + 2)) + 16)  _
  4.             + (url((k + 3)) + 24)))),UInteger))

Ответить

Номер ответа: 13
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #13
Добавлено: 14.01.12 22:41
Интересно, тут выполнилось нормально http://ideone.com/ei03L Правда у них Mono.
P.S. сегодня узнал о сайте http://www.convertdatatypes.com Для написания программ теперь даже над конвертацией типов заморачиваться не надо. Люди не нужны будут скоро:) Как в одной из серий Теории Б.В. шелдон пришёл к кутропали и написал программу, которая заменила его:)

Ответить

Номер ответа: 14
Автор ответа:
 Ahtoxa



Вопросов: 6
Ответов: 29
 Профиль | | #14 Добавлено: 14.01.12 22:43
если языка не знаешь то есть конвертеры в нете.

Ага, я с помощью их и переводил.
  1. a += DirectCast((url(k + 0) + (url(k + 1) << 8) + (url(k + 2) << 16) + (url(k + 3) << 24)), UInteger)

и
  1. a = a + CType((url((k + 0)) + ((url((k + 1)) << 8) + ((url((k + 2)) << 16) + (url((k + 3)) << 24)))), UInteger)

На оба ругается, на "url(k + 1) << 8" - "Operator '<<' is not defined for types 'Char' and 'Integer'"

Ответить

Номер ответа: 15
Автор ответа:
 Ahtoxa



Вопросов: 6
Ответов: 29
 Профиль | | #15 Добавлено: 14.01.12 22:50
Интересно, тут выполнилось нормально http://ideone.com/ei03L Правда у них Mono.

Блин, в чём же проблема. У меня та же ошибка:
  1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2. Dim url As String
  3.         Dim k As Integer
  4.         Dim a As UInteger
  5.         url = "Hello"
  6.         k = 1
  7.         a = 2654435769
  8.         a += Convert.ToUInt32(url(k + 0)) + (Convert.ToUInt32(url(k + 1)) << 8) + _
  9.                 (Convert.ToUInt32(url(k + 2)) << 16) + (Convert.ToUInt32(url(k + 3)) << 24)
  10.         MsgBox(a)
  11.     End Sub

Arithmetic operation resulted in an overflow :(

Ну... буду ждать, может кто ещё что посоветует.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам