Long

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Long

Сообщение Конь » 01.09.2007 (Сб) 3:08

Странное дело. Почему число, хранящееся в переменной типа long в С++, не влезает в переменную Long в VB? Обе занимают в памяти 4 байта... не понимаю.
Подпись находится в стадии разработки...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.09.2007 (Сб) 3:32

Откуда вывод, что не влезает?
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.09.2007 (Сб) 9:06

Мне кажется - я понял откуда вывод.

Оттуда, что
Код: Выделить всё
long e;
e= 2147483648;

у автора работает, а
Код: Выделить всё
Dim e as long
e=2147483648

- нет.

Конь, я угадал? :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 01.09.2007 (Сб) 9:28

Примерно так:) Почему - не могу понять:)
Подпись находится в стадии разработки...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.09.2007 (Сб) 9:51

Хакер писал(а):Мне кажется - я понял откуда вывод.

Оттуда, что
Код: Выделить всё
long e;
e= 2147483648;

у автора работает

(Причём после этого e<0 вернёт TRUE, но это автора не колышет?)
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 01.09.2007 (Сб) 9:54

Подсказка, подумать, что есть 2147483648 в шестнадцатеричнй форме.
Весь мир матрица, а мы в нем потоки байтов!

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 01.09.2007 (Сб) 14:05

Так... Вроде бы понятно.
Вопрос: Как перевести число из шестнадцатеричной в десятичную систему? Чтоб могло получиться отрицательное число... Порылся в инете, чего-то ничего интересного не накопал... А то мне как раз надо дофига чисел переводить в десятичную, написал функцию, а оно мне Overflow выдает.
Подпись находится в стадии разработки...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.09.2007 (Сб) 14:24

Так... Вроде бы понятно.

Ура!! :D
Вопрос: Как перевести число из шестнадцатеричной в десятичную систему?

НиУра :(
А то мне как раз надо дофига чисел переводить в десятичную, написал функцию, а оно мне Overflow выдает.

Покажи. А то может быть xenomorph-овский DeHex() отдыхает :)

Viper
Подсказка ему не помогла.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 01.09.2007 (Сб) 14:42

Немножко непрактично, писал на скорую руку. Но, в принципе, работает. Только не работает с отрицательными числами. Ибо алгоритма не знаю...

Код: Выделить всё
Private Function Hex2Dec(ByVal HexNum As String) As Long

    Dim i As Integer
    Dim sTmp As String, iTmp As Integer
    For i = 1 To Len(HexNum)
        sTmp = Mid(HexNum, Len(HexNum) - i + 1, 1)
        Select Case LCase(sTmp)
            Case "a"
                iTmp = 10
            Case "b"
                iTmp = 11
            Case "c"
                iTmp = 12
            Case "d"
                iTmp = 13
            Case "e"
                iTmp = 14
            Case "f"
                iTmp = 15
            Case Else
                iTmp = Val(sTmp)
        End Select
        Hex2Dec = Hex2Dec + iTmp * 16 ^ (i - 1)
    Next

End Function
Подпись находится в стадии разработки...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.09.2007 (Сб) 14:47

Конь
Во-первых: нафига тебе хранить значения ввиде строки?
Во-вторых: Val переводит строковый Hex в число с учётом знака.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 01.09.2007 (Сб) 14:52

1. Я пытаюсь перевести некий код с С++ в VB. А там все в hex. 1023 числа:) Не буду же я их вручную переводить в десятичную систему... Проще запихнуть их в каком надо виде в код и перевести программно :)
2. Нифига он не переводит. На числа, начинающиеся с букв выдает 0, с цифр - первые цифры, до букв.
Подпись находится в стадии разработки...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.09.2007 (Сб) 14:54

1. Там 0x01234567. Вот и пиши в программе &h01234567. И не надо хранить хекс строкой.

2. Val("&h80123456")
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 01.09.2007 (Сб) 14:56

Бгг. Спасибо :)
Подпись находится в стадии разработки...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot] и гости: 54

    TopList  
cron