перевод чисел в байты вида 0x00

На вход будут поступать числа, значение датчика расстояния, мне нужно перевести их к виду 0x01, 0x20, 0xA0, 0x00 первые биты младшие

например число 400 должно быть в виде 0x90, 0x01

Что бы подставить в выражение: unsigned char stmp[8] = {0x90, 0x01};

#include <SPI.h>
#include "mcp_can.h"

const int SPI_CS_PIN = 10;


MCP_CAN CAN(SPI_CS_PIN);

void setup()
{
    Serial.begin(115200);
while (CAN_OK != CAN.begin(CAN_250KBPS, MCP_8MHz))
    {
      Serial.println("CAN BUS Shield init fail");
      Serial.println(" INit CAN BUS Shield again");
      delay(100); 
      }

    Serial.println("CAN BUS Shield Init OK!");
}
// Пробег
unsigned char stmp[8] = {0x90, 0x01};

    
void loop()
{   
  Serial.println("In loop");
  CAN.sendMsgBuf(0x18FEC1EE, 1, 8, stmp);
  delay(100);
}

Ответы (1 шт):

Автор решения: Vanyamba Electronics
unsigned char stmp[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int number = 400;
*((int*)stmp) = number;

Чтобы избежать приведения типа (вдруг компилятор так строго настроен), можно использовать более хитрый код:

typedef union {
    unsigned char uc_array[8];
    unsigned int ui_number;
} stmp_t;
stmp_t stmp;

number = 400;

stmp.ui_number = number;

CAN.sendMsgBuf(0x18FEC1EE, 1, 8, stmp.uc_array);
   
→ Ссылка