Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
1

Парсинг hex значений

29.06.2018, 05:47. Показов 3436. Ответов 62
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. В ASM файле есть такая строка к примеру
dc.w 0, $8CE, $6AC, $48A, $268, $46, $224, 2 ; earth

Я помещаю это в виде строкового массива
$8CE
$6AC
$48A
$268
$46
$224
2

Короче это цвета. Например 8CE это своеобразная шестнадцетеричная BGR палитра если перевести в RGB то приблизительно будет

255, 219, 146

Так вот в некоторых местах Есть $46 к примеру что будет как $046

Перевод в rgb палитру делается по формуле

r = b * 255 / 14
g = g * 255 / 14
b = r * 255 / 14

Так вот вот в этой своеобразной палитре если цвет начинается на 0 то его не пишут. Только если заканчивается

Как мне сделать парсинг палитры чтобы получить дополнительные 0

Добавлено через 48 минут
В принципе и самому дошло как
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string GetSEGAColor(string s)
        {
            s = s.Replace("$", "");
 
            var ret = "";
            switch (s.Length)
            {
                case 1:  ret = "00" + s; break;
                case 2:  ret = "0"  + s; break;
                case 3:  ret =        s; break;
                default: ret =      "0"; break;
            }
 
            return ret;
        }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2018, 05:47
Ответы с готовыми решениями:

Парсинг большого количества hex значений из текстового файла
Нужно из текстового файла прочитать кучу hex целочисленных значений от int16 до uint64, а книжку...

Парсинг XML значений для получения значений Double
Всем добрый день. Есть XML файл в котором нужно спарсить значения double. Подскажите пожалуйста...

Замена hex значений
Читаю файл вот так: procedure ReadFileAsHex(const AFileName: string; ADestination: TStrings); var...

Редактирование hex значений в файле
Всем привет. Не знаю как сделать то что на 2 скриншотах. На 1 до, на втором - после. В какую...

62
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
07.07.2018, 19:37  [ТС] 61
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Someone007 Посмотреть сообщение
C#
1
2
3
4
5
6
                const double multFactor = 14.0 / 255.0;
                var b = (int)Math.Round((double)c.B * multFactor);
                var g = (int)Math.Round((double)c.G * multFactor);
                var r = (int)Math.Round((double)c.R * multFactor);
                var sega = b * 256 + g * 16 + r;
                return $"{sega:X}";
Я не пойму а что это делает
var sega = b * 256 + g * 16 + r;
?
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
07.07.2018, 20:07 62
Alexandr_7, собирает вам цвет пикселя из трёх цветовых компонент...
0
-338 / 245 / 26
Регистрация: 01.06.2018
Сообщений: 3,137
09.07.2018, 05:13 63
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Формула неправильная. Тут формула какая?
hb * 255 / 14
А у вас
hb * (255 / 14)
Это не одно и тоже
По правилам алгебры операции * и / равноценны, поэтому 2*2*2 = (2*2)*2 = 2*(2*2), а так же 2*2/2 = 2*(2/2) = (2*2)/2

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Я не пойму а что это делает
var sega = b * 256 + g * 16 + r;
?
Изучите основы двоичного представления данных, это базовые знания при манипуляции со многими данными в ПК. Например, 15 или $F или 0xF это 1111 - четыре бита. Поэтому когда вы пишете FF, то у вас в ПК это хранится как 11111111, то есть два раза по 1111. Если вы работаете с десятичными данными, например цвет 8 и они находятся во втором знаке, то вы не можете просто записать 1000 в переменную, так как значение цвета окажется не на своем месте. Вам нужно либо сдвинуть число на 4 бита - (8 << 4) и получить 10000000 или, что эквивалентно, умножить на 16 - (8*16) и так же получить 10000000, таким образом вы меняете значение определенного цвета.
Бит можно использоваться как флаг, например для int значений один бит используется для указания на знак, поэтому максимальное абсолютное значение, которое вы сможете записать в такую переменную в 2 раза меньше, чем для unsigned int (беззнаковое целое). Флаги в своей программе можно использовать для разных целей везде, где вы используете bool. Например 1111 может хранить 4 флага, где мы условимся, что первый бит (принято считать справа) это например принадлежность игры к определенной кодировке цветовой палитры, второй бит, например, это тип эмулятора (если вы их используете всего два). И т.д. Обращаться к таким данным придется через операцию с логическим "И". Где "0" используется для отброса ненужных значений бит, а "1" для чтения бита. Например для нашего цвета 8 нужно будет делать (Color & 1000) (я упростил написание двоичного числа, если хотите использовать их явно, то пишите в C# как "1000".b() ). После такой операции везде где стоит "0" биты обнулятся, а там где стоит "1" будет прочитано одно из двух состояний, если "0" то будет "0", если "1", то будет "1". Так мы узнаем, есть ли нужный бит.
В итоге, команда
C#
1
var sega = b * 256 + g * 16 + r;
манипулирует 12 битами, где
C#
1
2
3
r = 0000 0000 XXXX
g = 0000 XXXX 0000
b = XXXX 0000 0000
0
09.07.2018, 05:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2018, 05:13
Помогаю со студенческими работами здесь

Редактор hex-значений нетипизированного файла через Memo
Хочу написать редактор такого вида: Открываем нетипизированный файл (20 мб) в Memo (или что-то...

Отображение на экране значений головного и хвостового указателей кольцевого буфера в виде hex строк
Отображение на экране значений головного и хвостового указателей кольцевого буфера в виде...

[Dendy] Увеличить начальную скорость падения блоков в tetris.1989 (редактирование значений в HEX редакторе)
Доброго дня! Когда-то мне здесь помогли написать диплом. Теперь снова обращаюсь к Вам. Играю в...

Парсинг значений
Вообщем ситуация такая ( в целом обрисую) Нужно сделать некое подобие трейдера ( чтобы в окне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
63
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru