Como unir 4 bytes a uma variavel de 32 bit´s, ou de 16 bits.
Por este motivo, resolvi compartilhar estas makros que eu fiz pra brincar, e ajudar os novatos.
Aplica-se a qualquer compilador que não seja sistematico e aceite C ANSI.
- Código: Selecionar todos
////////////////////////////////////////////////////////////////////////////////
// FUNÇÃO : pega partes de uma variavel de 16/32 bits
// PROCEDIMENTO : diretivas de compilador
// PARÃMETRO : variavel tipo 16 ou 32 bits
// RETORNO : 1 byte respectivo
// ULTIMA EDIÇÃO :
// OBS :
////////////////////////////////////////////////////////////////////////////////
#define lo(param) ((short *)¶m)[0]
#define hi(param) ((short *)¶m)[1]
#define higher(param) ((short *)¶m)[2]
#define highest(param) ((short *)¶m)[3]
////////////////////////////////////////////////////////////////////////////////
// FUNÇÃO : união de variaveis de 8 bits a uma de 16 ou 32 bits
// PROCEDIMENTO : seta valor de bytes 0...4 com valor passado
// PARÃMETRO : var 1 = 16/32 bits, var 2 = 8 bits
// RETORNO : nenhum
// ULTIMA EDIÇÃO :
// OBS :
////////////////////////////////////////////////////////////////////////////////
#define unilo(param,param2) ((short *)¶m)[0] = ((short *)¶m2)[0]
#define unihi(param,param2) ((short *)¶m)[1] = ((short *)¶m2)[0]
#define unihigh(param, param2) ((short *)¶m)[2] = ((short *)¶m2)[0]
#define unihiguest(param, param2) ((short *)¶m)[3] = ((short *)¶m2)[0]
////////////////////////////////////////////////////////////////////////////////
// FUNÇÃO : seta bit de parametro sem uso de struct
// PROCEDIMENTO : seta bit de byte respectivo 0..3
// PARÃMETRO : variavel de 8 a 32 bits
// RETORNO :
// ULTIMA EDIÇÃO :
// OBS :
////////////////////////////////////////////////////////////////////////////////
#define setbit0(param) ((short *)¶m)[0] |= 0b00000001
#define setbit1(param) ((short *)¶m)[0] |= 0b00000010
#define setbit2(param) ((short *)¶m)[0] |= 0b00000100
#define setbit3(param) ((short *)¶m)[0] |= 0b00001000
#define setbit4(param) ((short *)¶m)[0] |= 0b00010000
#define setbit5(param) ((short *)¶m)[0] |= 0b00100000
#define setbit6(param) ((short *)¶m)[0] |= 0b01000000
#define setbit7(param) ((short *)¶m)[0] |= 0b10000000
#define setbit8(param) ((short *)¶m)[1] |= 0b00000001
#define setbit9(param) ((short *)¶m)[1] |= 0b00000010
#define setbit10(param) ((short *)¶m)[1] |= 0b00000100
#define setbit11(param) ((short *)¶m)[1] |= 0b00001000
#define setbit12(param) ((short *)¶m)[1] |= 0b00010000
#define setbit13(param) ((short *)¶m)[1] |= 0b00100000
#define setbit14(param) ((short *)¶m)[1] |= 0b01000000
#define setbit15(param) ((short *)¶m)[1] |= 0b10000000
#define setbit16(param) ((short *)¶m)[2] |= 0b00000001
#define setbit17(param) ((short *)¶m)[2] |= 0b00000010
#define setbit18(param) ((short *)¶m)[2] |= 0b00000100
#define setbit19(param) ((short *)¶m)[2] |= 0b00001000
#define setbit20(param) ((short *)¶m)[2] |= 0b00010000
#define setbit21(param) ((short *)¶m)[2] |= 0b00100000
#define setbit22(param) ((short *)¶m)[2] |= 0b01000000
#define setbit23(param) ((short *)¶m)[2] |= 0b10000000
#define setbit24(param) ((short *)¶m)[3] |= 0b00000001
#define setbit25(param) ((short *)¶m)[3] |= 0b00000010
#define setbit26(param) ((short *)¶m)[3] |= 0b00000100
#define setbit27(param) ((short *)¶m)[3] |= 0b00001000
#define setbit28(param) ((short *)¶m)[3] |= 0b00010000
#define setbit29(param) ((short *)¶m)[3] |= 0b00100000
#define setbit30(param) ((short *)¶m)[3] |= 0b01000000
#define setbit31(param) ((short *)¶m)[3] |= 0b10000000
////////////////////////////////////////////////////////////////////////////////
// FUNÇÃO : zera bit parametro sem uso de struct
// PROCEDIMENTO : zera bit de parametro com uso de AND
// PARÃMETRO : variavel de 8 a 32 bits
// RETORNO :
// ULTIMA EDIÇÃO :
// OBS :
////////////////////////////////////////////////////////////////////////////////
#define clrbit0(param) ((short *)¶m)[0] &= ~0b00000001
#define clrbit1(param) ((short *)¶m)[0] &= ~0b00000010
#define clrbit2(param) ((short *)¶m)[0] &= ~0b00000100
#define clrbit3(param) ((short *)¶m)[0] &= ~0b00001000
#define clrbit4(param) ((short *)¶m)[0] &= ~0b00010000
#define clrbit5(param) ((short *)¶m)[0] &= ~0b00100000
#define clrbit6(param) ((short *)¶m)[0] &= ~0b01000000
#define clrbit7(param) ((short *)¶m)[0] &= ~0b10000000
#define clrbit8(param) ((short *)¶m)[1] &= ~0b00000001
#define clrbit9(param) ((short *)¶m)[1] &= ~0b00000010
#define clrbit10(param) ((short *)¶m)[1] &= ~0b00000100
#define clrbit11(param) ((short *)¶m)[1] &= ~0b00001000
#define clrbit12(param) ((short *)¶m)[1] &= ~0b00010000
#define clrbit13(param) ((short *)¶m)[1] &= ~0b00100000
#define clrbit14(param) ((short *)¶m)[1] &= ~0b01000000
#define clrbit15(param) ((short *)¶m)[1] &= ~0b10000000
#define clrbit16(param) ((short *)¶m)[2] &= ~0b00000001
#define clrbit17(param) ((short *)¶m)[2] &= ~0b00000010
#define clrbit18(param) ((short *)¶m)[2] &= ~0b00000100
#define clrbit19(param) ((short *)¶m)[2] &= ~0b00001000
#define clrbit20(param) ((short *)¶m)[2] &= ~0b00010000
#define clrbit21(param) ((short *)¶m)[2] &= ~0b00100000
#define clrbit22(param) ((short *)¶m)[2] &= ~0b01000000
#define clrbit23(param) ((short *)¶m)[2] &= ~0b10000000
#define clrbit24(param) ((short *)¶m)[3] &= ~0b00000001
#define clrbit25(param) ((short *)¶m)[3] &= ~0b00000010
#define clrbit26(param) ((short *)¶m)[3] &= ~0b00000100
#define clrbit27(param) ((short *)¶m)[3] &= ~0b00001000
#define clrbit28(param) ((short *)¶m)[3] &= ~0b00010000
#define clrbit29(param) ((short *)¶m)[3] &= ~0b00100000
#define clrbit30(param) ((short *)¶m)[3] &= ~0b01000000
#define clrbit31(param) ((short *)¶m)[3] &= ~0b10000000
////////////////////////////////////////////////////////////////////////////////
// FUNÇÃO : testa bit parametro sem uso de struct
// PROCEDIMENTO : testa bit de parametro com uso de AND
// PARÃMETRO : variavel de 8 a 32 bits
// RETORNO :
// ULTIMA EDIÇÃO :
// OBS :
////////////////////////////////////////////////////////////////////////////////
#define tstbit0(param) ((short *)¶m)[0] & 0b00000001
#define tstbit1(param) ((short *)¶m)[0] & 0b00000010
#define tstbit2(param) ((short *)¶m)[0] & 0b00000100
#define tstbit3(param) ((short *)¶m)[0] & 0b00001000
#define tstbit4(param) ((short *)¶m)[0] & 0b00010000
#define tstbit5(param) ((short *)¶m)[0] & 0b00100000
#define tstbit6(param) ((short *)¶m)[0] & 0b01000000
#define tstbit7(param) ((short *)¶m)[0] & 0b10000000
#define tstbit8(param) ((short *)¶m)[1] & 0b00000001
#define tstbit9(param) ((short *)¶m)[1] & 0b00000010
#define tstbit10(param) ((short *)¶m)[1] & 0b00000100
#define tstbit11(param) ((short *)¶m)[1] & 0b00001000
#define tstbit12(param) ((short *)¶m)[1] & 0b00010000
#define tstbit13(param) ((short *)¶m)[1] & 0b00100000
#define tstbit14(param) ((short *)¶m)[1] & 0b01000000
#define tstbit15(param) ((short *)¶m)[1] & 0b10000000
#define tstbit16(param) ((short *)¶m)[2] & 0b00000001
#define tstbit17(param) ((short *)¶m)[2] & 0b00000010
#define tstbit18(param) ((short *)¶m)[2] & 0b00000100
#define tstbit19(param) ((short *)¶m)[2] & 0b00001000
#define tstbit20(param) ((short *)¶m)[2] & 0b00010000
#define tstbit21(param) ((short *)¶m)[2] & 0b00100000
#define tstbit22(param) ((short *)¶m)[2] & 0b01000000
#define tstbit23(param) ((short *)¶m)[2] & 0b10000000
#define tstbit24(param) ((short *)¶m)[3] & 0b00000001
#define tstbit25(param) ((short *)¶m)[3] & 0b00000010
#define tstbit26(param) ((short *)¶m)[3] & 0b00000100
#define tstbit27(param) ((short *)¶m)[3] & 0b00001000
#define tstbit28(param) ((short *)¶m)[3] & 0b00010000
#define tstbit29(param) ((short *)¶m)[3] & 0b00100000
#define tstbit30(param) ((short *)¶m)[3] & 0b01000000
#define tstbit31(param) ((short *)¶m)[3] & 0b10000000