aadalah pointer ke array byte. Jika Anda melemparkannya ke uint16_t dan menetapkannya b, maka bakan berisi alamat basis array (tempat disimpannya) di SRAM. Jika Anda ingin memperlakukan dua byte array asebagai integer, maka gunakan union seperti yang disarankan oleh user14284, tetapi perlu diketahui bahwa union akan mewakili array byte dalam pemesanan byte memori arsitektur (dalam AVR yang akan sedikit -endian, yang berarti byte 0 adalah byte paling signifikan). Cara menulis itu dalam kode adalah:
union{
uint8_t a[2];
uint16_t b;
} x;
x.b[0] = 0x35;
x.b[1] = 0x4A;
// by virtue of the above two assignments
x.a == 0x4A35 // is true
Cara lain untuk melakukan ini tanpa menggunakan gabungan adalah dengan melemparkan ake pointer uint16_t dan kemudian dereferensi seperti itu:
uint8_t a[2] = {0x35, 0x4A};
uint16_t b = *((uint16_t *) a);
b == 0x4A35; // because AVR is little endian
Jika Anda menggunakan buffer untuk menyimpan data big endian (mis. Urutan byte jaringan), maka Anda perlu byte-swap untuk menggunakan salah satu dari teknik ini. Cara untuk melakukannya tanpa cabang atau variabel sementara adalah:
uint8_t a[2] = {0x35, 0x4A};
a[0] ^= a[1];
a[1] ^= a[0];
a[0] ^= a[1];
a[0] == 0x4A; // true
a[1] == 0x35; // true
Kebetulan ini bukan AVR atau bahkan masalah yang hanya tertanam. Kode jaringan level aplikasi yang ditulis untuk PC biasanya memanggil fungsi-fungsi yang disebut htonl, htons(host to network, varian 32-dan 16-bit) dan ntohl, ntohs(network to host, varian 32-dan 16-bit) yang implementasinya bergantung pada arsitektur target, apakah mereka menukar byte atau tidak (dengan asumsi bahwa byte yang dikirimkan 'on the wire' selalu big-endian ketika mereka adalah bagian dari kata-kata multi-byte).