Код: Выделить всё
int t = 0x1b;
char c1, c2;
c1=((char*)&t)[0];
c2=((char*)&t)[1];
char str1[] = {c1,c2};c2 = '\0'
а думал что 27 выдаст.
Вот поэтому и не могу разобраться.
Код: Выделить всё
int t = 0x1b;
char c1, c2;
c1=((char*)&t)[0];
c2=((char*)&t)[1];
char str1[] = {c1,c2};Тут на выходе в терминале такое выдает:Ser60 писал(а):Это легко самому проверить, попробовав скомпилировать. Если t типа int то компилятору не понравится обращение к ней как к массиву.
Я-бы сделал на передающем конце так:При этом 4-байтная переменная f будет передана от старшего байта к младшему.Код: Выделить всё
float f = 0x1234; int count = sizeof f; while (count) { while (!(IFG2&UCA0TXIFG)); count--; UCA0TXBUF = *((char*) &f + count); }
Код: Выделить всё
000001 17:01:42.595 00 D4 .Ф
000002 17:01:45.628 45 11 E.
000003 17:01:48.015 45 91 00 E‘.
000004 17:01:48.571 00 .
ну да. строка это массив символов типа char.Ser60 писал(а):Нужно данные до пересылки переводить в строку. Например, вместо int i = 123 посылать на терминал "123"
Код: Выделить всё
int t = 0x1b;
char c1, c2;
c1=((char*)&t)[0];
c2=((char*)&t)[1];
char str1[] = {c1,c2};Вот именно. я как раз и задался такой целью. Только не для двухзначных чисел, а для чисел с большим числом знаков (произвольным.)Ser60 писал(а):Нет, не переводит. У Вас t=0x1b=27, поэтому c1=27 и получаете код ESC. При переводе в строку должно быть c1=55, c2=50 где 55='7' (т.е. ASCII код 7) и 50 = '2'. Если на терминале хотите видеть десятичные числа, то для перевода в строку следует делить t на 10 и собирать остатки от деления. Потом к остаткам добавлять 48 для ASCII conversion ( здесь 48='0').