Kod: Markera allt
int ch;
ch = 'ä';
printf("0x%X\n", ch );Korrekt metod:
Kod: Markera allt
unsigned char ch;
ch = 'ä';
printf("0x%02X\n", (int)ch );Kod: Markera allt
int ch;
ch = 'ä';
printf("0x%X\n", ch );Kod: Markera allt
unsigned char ch;
ch = 'ä';
printf("0x%02X\n", (int)ch );
Det är ju lite lustigt, egentligen, eftersom "strängar" i C består av arrayer med char, som just är signed. Annars får man definiera dem som unsigned char. Själv har jag gjort så (för AVR) att jag använder typen uint8_t istället för char.sodjan skrev:Man använder aldrig signed till variabler som enbart ska innehålla "text".
Kod: Markera allt
uint8_t byte = 0b00110010;
#define BIT0 1
#define BIT1 2
#define BIT2 4
#define BIT3 8
#define BIT4 16
#define BIT5 32
#define BIT6 64
#define BIT7 128
#define check_bit(byte,bit) (byte and bit)
//senare i programmet vill du veta om BIT4 är satt:
if (check_bit(byte, BIT4)) {
// Gör något
}
Kod: Markera allt
uint8_t controlbits = 0b00001000;
#define MOTOR_ON 1
#define TEMP_HIGH 2
#define STOP_ALL 4
if (check_bit(controlbits, MOTOR_ON) {
stoppa_motor();
}Hej jesse, tack för ditt bidrag!jesse skrev:Det är ju lite lustigt, egentligen, eftersom "strängar" i C består av arrayer med char, som just är signed. Annars får man definiera dem som unsigned char. Själv har jag gjort så (för AVR) att jag använder typen uint8_t istället för char.sodjan skrev:Man använder aldrig signed till variabler som enbart ska innehålla "text".
BIT är vad du är intresserad av. Var är det du ska läsa av bitarna? Skickar du data från din PC till en AVR som ska tolka bitarna eller är det tvärt om?
När man tolkar bitar i en AVR kan man göra på många sätt. Skriver du i C kan du t.ex. göra så här:
Givetvis döper du bitarna till det de ska vara till, istället för BIT0, BIT1 etc:Kod: Markera allt
uint8_t byte = 0b00110010; #define BIT0 1 #define BIT1 2 #define BIT2 4 #define BIT3 8 #define BIT4 16 #define BIT5 32 #define BIT6 64 #define BIT7 128 #define check_bit(byte,bit) (byte and bit) //senare i programmet vill du veta om BIT4 är satt: if (check_bit(byte, BIT4)) { // Gör något }Kod: Markera allt
uint8_t controlbits = 0b00001000; #define MOTOR_ON 1 #define TEMP_HIGH 2 #define STOP_ALL 4 if (check_bit(controlbits, MOTOR_ON) { stoppa_motor(); }
Kod: Markera allt
if (check_bit(byte, BIT4)) {
// Gör något
}Kod: Markera allt
// Check if a specific bit is set
int is_in_use(char datacheck, int bit_num)
{
return datacheck & 1<<bit_num;
}Kod: Markera allt
#define MOTOR_ON 1
if (check_bit(controlbits, MOTOR_ON) {
stoppa_motor();
}Kod: Markera allt
ch = (unsigned) 'ä';