如何根据背景颜色获取 8 行列的十六进制值?

如何根据背景颜色获取 8 行列的十六进制值?

我有一个电子表格,用于帮助可视化每个 ASCII 字符的字符位图。对于 5x7 字体,我使用 5 个单元格宽(列)和 7 个单元格高(行)。然后,我将 8 行列中每个单元格的背景标记为黑色,以表示字节的位,其中每个位都是一个像素,黑色背景表示一个像素ON。然后,我创建一个字节数组作为我的字符表示。对于我想要的每种字体大小,我必须对 95 个字符(ASCII 值)执行此操作。

问题是我必须盯着字符的每一列,确定它的二进制值,然后找出十六进制值。因此,试图找出 5 宽字符表的 495 个字节变成了一项繁琐的工作。我想知道是否有一个可以编写的工作表函数来检查单元格的背景颜色,如果是黑色,则设置n变量的第位,然后在下面创建该列的十六进制值。

总结我没有在 Excel 中编写函数的经验。我正在使用 LCD 屏幕。我有一个电子表格,上面有我所有的字符——其中每个像素的ON背景颜色都是黑色。1 个单元格 = 1 位字节。我需要一个函数,它可以根据背景单元格是否为黑色为我提供列的十六进制值。继续说明。

以下是我的电子表格中 5x7 字符“A”的示例。*** 表示单元格的背景颜色为黑色,否则为白色。(如果需要,可以向每个背景颜色为黑色的单元格添加单元格值 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

您可以添加一列来指示位位置并添加1s(位数)。对于下面的示例,我所做的是:

  1. 为我的 5x7 范围创建一个条件格式,如果我输入1一个单元格,它会变成黑色(我使用橙色,这样我可以看到 1)。

    在此处输入图片描述

  2. 在字符左边添加一列,以标记十进制中的位位置, , , , ,124B816) 。3264

  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

相关内容