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

Kcv*_*vin 0 worksheet-function microsoft-excel microsoft-excel-2010

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

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

TL;DR我没有在 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)
Run Code Online (Sandbox Code Playgroud)

字节数组将是:

byte A[] = { 0x7E, 0x09, 0x09, 0x09, 0x7E };
Run Code Online (Sandbox Code Playgroud)

伪代码版本(一栏):

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

Ell*_*esa 5

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

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

    在此处输入图片说明

  2. 在字符的左侧添加一列以标记十进制中的位位置1248163264 (参见 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)
Run Code Online (Sandbox Code Playgroud)

前任: 在此处输入图片说明

参考http://www.computerhope.com/binhex.htm