У меня есть электронная таблица, которую я использую, чтобы помочь визуализировать битовую карту символов для каждого символа ASCII. Для шрифта 5x7 я использую 5 ячеек (столбцы) и 7 ячеек (строки). Затем я отметил черный фон для каждой ячейки в столбце из 8 строк, чтобы представить биты байта, где каждый бит является пикселем, а черный фон означает, что пиксель ON . Затем я создаю байтовый массив, который будет моим символьным представлением. Я должен сделать это для 95 символов (значения ASCII), для каждого размера шрифта, который я хочу.

Проблема в том, что я должен смотреть на каждый столбец персонажа, определять его двоичное значение, а затем вычислять шестнадцатеричное значение. Поэтому попытка вычислить 495 байтов для таблицы из 5 символов становится утомительной работой. Я хочу знать, есть ли функция рабочего листа, которую я мог бы написать, которая будет проверять цвет фона ячейки, если черный установит n- й бит переменной, а затем создаст шестнадцатеричное значение этого столбца ниже.

TL; DR У меня нет опыта написания функций в Excel. Я работаю с ЖК-экраном. У меня есть электронная таблица со всеми моими персонажами, где каждый ON пиксель будет иметь черный цвет фона. 1 ячейка = 1 бит байта. Мне нужна функция, которая даст мне шестнадцатеричное значение столбца в зависимости от того, черный фон ячейки или нет. Перейдите к иллюстрациям.

Вот пример 5x7 символа «А» в моей электронной таблице. *** означает, что цвет фона ячейки черный, в противном случае - белый. (Не было бы проблемой добавить что-то вроде значения ячейки 1 в каждую ячейку, которая имеет цвет фона при необходимости, чтобы сделать эту функцию проще):

   ____________________
B0|   |***|***|***|   | (row 0)
  |-------------------|
B1|***|   |   |   |***| (row 1)
  |-------------------|
B2|***|   |   |   |***| (row 2)
  |-------------------|
B3|***|***|***|***|***| (row 3)
  |-------------------|
B4|***|   |   |   |***| (row 4)
  |-------------------|
B5|***|   |   |   |***| (row 5)
  |-------------------|
B6|***|   |   |   |***| (row 6)
  |-------------------|
B7|___|___|___|___|___| (row 7)
   7E  09  09  09  7E   (row 8)

Затем байтовый массив будет:

byte A[] = { 0x7E, 0x09, 0x09, 0x09, 0x7E };

Версия псевдокода (для одного столбца):

char hex = 0x00;
for(int bI = 0; bI < 8; bI++)
{
    if(cell[bI].BackgroundColor == Black)
    {
        hex |= (0x01 << bI;
    }
}
row8.Text = hex.ToString("X2");

1 ответ1

5

Вы можете добавить столбец, чтобы указать битовые позиции и добавить число 1 с (бит). Для моего примера ниже, что я сделал:

  1. Создайте условный формат для моего диапазона 5x7, где, если я введу 1 в ячейку, он станет черным (я использовал оранжевый, чтобы видеть 1).

  2. Добавьте столбец слева от символа, чтобы отметить битовые позиции в десятичном формате 1 , 2 , 4 , 8 , 16 , 32 , 64 (см. Столбец B).

  3. Чтобы получить шестнадцатеричные значения, используйте эту формулу в нижней части:

    =DEC2HEX(SUMPRODUCT($B$2:$B$8,D2:D8),2)

    Куда:

    • $ B $ 2: $ B $ 8 - это диапазон, содержащий битовые позиции в десятичном формате
    • D2: D8 - первый столбец в диапазоне 5x7
    • 2 - это число цифр, которое вы хотите отобразить

Если вы не хотите создавать дополнительный столбец, включите в формулу битовые позиции следующим образом:

=DEC2HEX(SUMPRODUCT({1;2;4;8;16;32;64},G1:G7),2)

Пример:

ссылка http://www.computerhope.com/binhex.htm

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .