A vos te llega: 7FAA0123
Y tu resultado debe ser 0x7FAA0123, aunque en realidad si lo dividís en bytes seria algo así 0x7F 0xAA 0x01 0x23.
El problema esta en que lo que te llega esta en ASCII. El '7' tiene el valor 55 decimal o 0x37 en hexa. Pero nosotros necesitamos que quede solamente el 0x7, al restarle '0' ( 0x30) nos queda el resultado correcto. Esto con los numero va genial, pero con las letras debemos cambiar los valores a restar. la 0xA = 10 decimal, la 'A' es 65 decimal o 0x41 hexadecimal. Yo podria restarle '7' ( que es 55 ) y asi me da el valor correcto:
'A' - '7' = 65 - 55 = 10 = 0xA
Pero no es intuitivo, alguien que lea el programa va a pensar, ¿por que le resta la letra 7? Entonces es mas intuitivo hacerlo asi:
'A' - 'A' + 10 = 65 - 65 + 10 = 10 = 0xA
De esta forma al restarle 'A', mi 'A' queda en 0, mi 'B' queda en 1 y asi. Pero en realidad yo necesito que quede en 10, por eso le sumo el 10.
El resultado que va a darle el compilador es el mismo, PERO visualmente es mas simple de entender el otro.
Te dejo la tabla ASCII:
https://upload.wikimedia.org/wikipedia/commons/d/dd/ASCII-Table.svgLuego de hacer eso que es simple de realizar, te queda asi:
array = {0x7,0xF,0xA,0xA,0x0,0x1,0x2,0x3};
Y son numeros que ocupan 1 byte cada uno, pero nosotros necesitamos unir esos numeros.
Hay 2 formas de verlo..
El 0x7 lo tengo que correr hacia la izquierda 28 veces y sumarlo, el 0xF correrlo 24 veces y sumarlo. Esto si pensaramos que el int32 es todo uno solo. Pero podriamos pensar que son 4 bytes seguidos. Y ese es la aproximacion que tome al usar punteros a char ( 1 byte ), pasando por los 4 bytes que le pertenecen al int32.
Y que en un PIC seria un SWAP mas una OR lo necesario por cada byte