gpt4 book ai didi

c - 如何通过多个字节数组移动一个字节

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:39 24 4
gpt4 key购买 nike

我正在研究包含 15 层的 LED 塔,其中每层包含 4 个字节(32 个 LED)。我希望能够从右向左移动一个字节。然而,多字节存在问题,无法弄清楚如何连续转换移位。

附加信息:

void Invert_Display(void){
for (int y = 0; y < LAYERS; y++){
for (int x = 0; x < BYTES; x++){
LED_Buffer[y][x] ^= (0b11111111);
}
}
Update_Display();

其中UpdateDisplay函数如下:

void Update_Display(void){

while(!TRMT); // Wait until transmission register is empty

for (int y = 0; y < LAYERS; y++){
for (int x = 0; x < BYTES; x++){
TXREG = LED_Buffer[y][x];
while (!TRMT);
}
}

LE = 1; // Data is loaded to the Output latch
NOP();
LE = 0; // Data is latched into the Output latch

预期结果附在下面。 enter image description here

最佳答案

以下代码将字节数组向左移动。要移动的位数必须在 1 到 7 之间。移动超过 7 位将需要额外的代码。

void shiftArrayLeft(unsigned char array[], int length, int shift) // 1 <= shift <= 7
{
unsigned char carry = 0; // no carry into the first byte
for (int i = length-1; i >= 0; i--)
{
unsigned char temp = array[i]; // save the value
array[i] = (array[i] << shift) | carry; // update the array element
carry = temp >> (8 - shift); // compute the new carry
}
}

它通过存储数组中的旧值来工作。然后通过移位和逻辑或前一个字节的进位来更新当前数组元素。然后计算新的进位(原始值的高位)。

函数可以这样调用

unsigned char array[] = { 0x00, 0x00, 0x00, 0xAA };
int length = sizeof(array) / sizeof(array[0]);
shiftArrayLeft(array, length, 1);

这会将数组更改为 { 0x00, 0x00, 0x01, 0x54 }

关于c - 如何通过多个字节数组移动一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55717567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com