我解決了這個問題,但不知道如何以良好的方式發佈它,所以我編輯這篇文章並將解決方案放在最後。將位從一個字節轉移到一個(數組)
在C中需要幫助,試圖將字節位轉換爲反轉順序。我想Step1[] = {1,0,0,1,0,0,0,0};
成爲{0,0,0,0,1,0,0,1}
。
void Stepper(void)
{
static uint8_t Step1[] = {1,0,0,1,0,0,0,0};
BridgeControl(Step1);
}
void BridgeControl(unsigned char *value)
{
uint8_t tempValue;
uint8_t bit = 8;
uint8_t rev = 1;
if (rev) // CW otherwise CCW
{
tempValue = *value;
do{
if(tempValue) // Right-shift one
tempValue = 1 >> 1;
else
tempValue = 0 >> 1;
}while(--bit, bit);
*value = tempValue;
}
我知道bridcontrol是完全錯誤的,在這裏我可能需要幫助! 親切的問候
新代碼:
void BridgeControl(uint8_t *value)
{
// For example, initial value could be 1001000 then I
// would like the outcome to be 00001001
uint8_t tempValue;
uint8_t bit = 3;
uint8_t rev = 1;
if (rev) // CW otherwise CCW
{
tempValue = *value; //so... its 0b10010000
do{
tempValue >>=1; //1st this produce 01001000
tempValue = 0 >> 1; //1st this produce 0010 0100
//2nd time produce 0001 0010
//3d time produce 0000 1001
}while(--bit, bit);
*value = tempValue;
}
M1BHI = value[7];
M1BLI = value[6];
M1AHI = value[5];
M1ALI = value[4];
M2BHI = value[3];
M2BLI = value[2];
M2AHI = value[1];
M2ALI = value[0];
}
解決方案:
void BridgeControl(uint8_t value)
{
uint8_t tempvalue[8];
uint8_t i = 8;
uint8_t cont;
cont = value;
do{
value = value >> i-1;
value = value & 1;
tempvalue[8-i] = value;
value = cont;
}while(--i,i);
M1BHI = tempvalue[7];
M1BLI = tempvalue[6];
M1AHI = tempvalue[5];
M1ALI = tempvalue[4];
M2BHI = tempvalue[3];
M2BLI = tempvalue[2];
M2AHI = tempvalue[1];
M2ALI = tempvalue[0];
}
如果我想在陣列中的位的相反順序,只是改變tempvalue[8-i]
到tempvalue[i-1]
。
爲什麼人們會低調?這是一個合法的問題,OP在發佈之前已經明確地嘗試了一些東西(這是問題!)。 – jadarnel27
你說的是位,但是顯示了一個整數數組的例子。我很困惑你究竟在做什麼。通過這個例子,它看起來像你試圖扭轉你的整數數組的順序。 –
這是C#嗎?看起來更像是C#和C(uint8_t,char *)的混合... – Jan