Problem
我需要这个大量的数据作为输入(对于基于C的arduino)。
这是上面示例中所需格式的大量数据:
const byte bitmap[8][8] = {
{0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF},
{0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81},
{0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF},
};
正如你所看到的,上面大量使用了十六进制,例如二进制中的0xFF是0b11111111
这是有道理的:想象一下通过 z 轴从显示器发出的比特形成一条 8 个正方形的整条线。
如果您将字节分解为位并想象这些位形成层(具有并行位),那么您可以看到这个巨大的块代表了 3D 立方体(如上面的介绍所示)。 *或者,您可以将其可视化为通过 z 轴的整个字节 - 无论哪种方式,您最终都会得到介绍中的 3D 立方体。
我需要一个函数来转换大量数据,使得:
Input:
[[63, 62, 61, 60, 59, 58, 57, 56, 48, 40, 32, 24, 16, 8, 0, 1, 2, 3, 4, 5, 6, 7, 15, 23, 31, 39, 47, 55],
[63, 56, 0, 7],
[63, 56, 0, 7],
[35, 36, 27, 56, 28, 0, 7, 63],
[63, 56, 0, 7, 36, 35, 27, 28],
[63, 7, 56, 0],
[7, 0, 56, 63],
[7, 6, 5, 4, 3, 2, 1, 0, 8, 16, 32, 24, 40, 48, 56, 57, 58, 59, 60, 61, 62, 63, 55, 39, 47, 31, 23, 15]]
Output:
{
{0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF},
{0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81},
{0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81},
{0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF},
};
Attempt
以下是我的尝试:
massive = [[63, 62, 61, 60, 59, 58, 57, 56, 48, 40, 32, 24, 16, 8, 0, 1, 2, 3, 4, 5, 6, 7, 15, 23, 31, 39, 47, 55],
[63, 56, 0, 7],
[63, 56, 0, 7],
[35, 36, 27, 56, 28, 0, 7, 63],
[63, 56, 0, 7, 36, 35, 27, 28],
[63, 7, 56, 0],
[7, 0, 56, 63],
[7, 6, 5, 4, 3, 2, 1, 0, 8, 16, 32, 24, 40, 48, 56, 57, 58, 59, 60, 61, 62, 63, 55, 39, 47, 31, 23, 15]]
rows, cols = (8, 8)
arr = [['' for i in range(cols)] for j in range(rows)]
arr[0][0] = ''
for row in arr:
print(row)
def convert():
for i in range(0, 64):
for n in range(0,64):
for each in massive:
if i == massive[massive.index(each)][n]:
arr[massive.index(each)][n] = '1'
else:
arr[massive.index(each)][n] = '0'
convert()
for row in arr:
print(row)
Output:
['', '', '', '', '', '', '', '']
['', '', '', '', '', '', '', '']
['', '', '', '', '', '', '', '']
['', '', '', '', '', '', '', '']
['', '', '', '', '', '', '', '']
['', '', '', '', '', '', '', '']
['', '', '', '', '', '', '', '']
['', '', '', '', '', '', '', '']
Traceback (most recent call last):
File "main.py", line 28, in <module>
convert()
File "main.py", line 23, in convert
if i == massive[massive.index(each)][n]:
IndexError: list index out of range
我确实理解我在这里的错误,但我陷入困境,无法想出一种巧妙的方法来获得所需的输出。
编辑:*请考虑立方体的层数从下到上。
因此,massage[0] 将是第一层,因此是最底层,而 Massive[7] 将是最后一层,因此是顶部层(当可视化为立方体时,请参阅简介中的 3D Massive 表示)。