purebasic.info

PureBasic forum
Текущее время: Сб дек 15, 2018 7:22 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 3:27 pm 
Не в сети
доцент

Зарегистрирован: Вс май 15, 2016 5:08 pm
Сообщений: 55
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Наверняка тема беззнаковых чисел уже поднималась тут, но что-то найти поиском не удалось. Была ссылка на тему с родного форума, и инфа о том, что Фред не собирается якобы, дополнять язык поддержкой беззнаковости, но и ее я тоже не могу нашарить.

Вопрос в том, как получить то значение переменной счетчика, которое записывается в память ?

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
 
EnableExplicit
 
Define count.w = 65535
 
Define *memory = AllocateMemory(2)
 
PokeW(*memory, count.w)
 
Debug PeekW(*memory)
 
FreeMemory(*memory)
 



Дело в том, что нужно из файла читать именно беззнаковые числа и дальше работать уже с ними. Если с одиночными байтами вопросов нет, там есть тип Ascii со значениями от 0 до 255, то word, long и quad уже в обломе.

В примере выше, сильно упрощенном, нужно из памяти получить значение некоего счетчика, по которому провести заданное количество циклов обработки другой информации, а получается шляпа. Может есть какие-то велосипеды? Я б прокатился.

_________________
Чат по PureBasic в Telegram


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 4:58 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1717
Откуда: Алматы
Благодарил (а): 16 раз.
Поблагодарили: 47 раз.
Пункты репутации: 5
так жеж .a - для двух байтового это .u.

а .w не может быть 65535 - он напишет -1, поскольку там от -30сколько то тыщ до +30 сколько то там тыщь. поэтому для 65535 нужно .u


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 7:31 pm 
Не в сети
доцент

Зарегистрирован: Вс май 15, 2016 5:08 pm
Сообщений: 55
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Блин, про .U я напрочь забыл. Но тем не менее, LONG и QUAD то знаковые =(

_________________
Чат по PureBasic в Telegram


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 8:28 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 273
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
А так не пойдет?
Код:
1
2
3
4
5
6
7
8
9
10
11
*mem = AllocateMemory(8)
PokeQ(*mem, -9223372036854775808)
If PeekQ(*mem) < 0
  Debug "-"
EndIf
 
PokeQ(*mem, 9223372036854775807)
If PeekQ(*mem) > 0
  Debug "+"
EndIf
FreeMemory(*mem)



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 9:01 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1717
Откуда: Алматы
Благодарил (а): 16 раз.
Поблагодарили: 47 раз.
Пункты репутации: 5
сделай поиск в хелпе по слову variable по моему... и там внизу по моему будет эта статья про переменные и их лимиты. сам всегда плаваю с этими типами переменных :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 9:02 pm 
Не в сети
доцент

Зарегистрирован: Вс май 15, 2016 5:08 pm
Сообщений: 55
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
repeat: Эээээм. И что должен делать этот код?

SereZa: Да знаю я эти типы, просто не пользуешься чем-то - забываешь +)

_________________
Чат по PureBasic в Telegram


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 9:26 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 273
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
damn писал(а):
repeat: Эээээм. И что должен делать этот код?
По идее это)
damn писал(а):
Дело в том, что нужно из файла читать именно беззнаковые числа
ааа дошло :( вот жеж дубина.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 10:30 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 159
Откуда: Україна
Благодарил (а): 11 раз.
Поблагодарили: 11 раз.
Пункты репутации: 4
viewtopic.php?t=1929&p=31400 ?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 11:00 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1717
Откуда: Алматы
Благодарил (а): 16 раз.
Поблагодарили: 47 раз.
Пункты репутации: 5
так ты просмотрел все варианты чтения? от одного до восьми там прочитать можно.
Number.q = ReadQuad(#File)
Read a quad (8 bytes) from a file.

Number.i = ReadInteger(#File)
Read an integer (4 bytes in 32-bit executable, 8 bytes in 64-bit executable) from a file.

и так далее.

а ежели что-то не стандартное, то надо со смещением колдовать. типа скажем 3 байта какое-то число.
Код:
1
2
3
4
a.a = ReadAsciiCharacter(#File)
b.a = ReadAsciiCharacter(#File)
c.a = ReadAsciiCharacter(#File)
itog.l = a << 16 + b << 8 + c


но это не точно :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Вт фев 27, 2018 11:14 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 273
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
Дак речь скорее всего об этом:
Код:
1
2
Debug Bin(-4, #PB_Byte)
Debug Bin(252, #PB_Byte)

:?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Unsigned INT
СообщениеДобавлено: Ср фев 28, 2018 11:49 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 362
Благодарил (а): 1 раз.
Поблагодарили: 13 раз.
Пункты репутации: 0
Я не знаю порядок байт в числе хранящемся в вашем файле, поэтому просто информация для размышления по поводу применимости UNION
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Structure BZ
  StructureUnion
    Long.l
    Asc.a[4]
  EndStructureUnion
EndStructure
 
Define UW.BZ
 
UW\Long = 0
Debug UW\Long
 
UW\Asc[0] = 0
UW\Asc[1] = 0
UW\Asc[2] = 0
UW\Asc[3] = 0
Debug UW\Long
 
UW\Long = 65535
Debug UW\Asc[0]
Debug UW\Asc[1]
Debug UW\Asc[2]
Debug UW\Asc[3]
Debug UW\Long
 
UW\Long = 66535
Debug UW\Asc[0]
Debug UW\Asc[1]
Debug UW\Asc[2]
Debug UW\Asc[3]
Debug UW\Long
 
UW\Long = 535
Debug UW\Asc[0]
Debug UW\Asc[1]
Debug UW\Asc[2]
Debug UW\Asc[3]
Debug UW\Long



0
0
255
255
0
0
65535
231
3
1
0
66535
23
2
0
0
535

т.е. нужно при чтении правильно распихать по ячейкам UW\Asc[*]


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB