2013-05-04 17 views
6

Szukam typów uint24_t i uint48_t w GCC i MinGW. Nie wiem, czy są one znormalizowane, ale natrafiłem na odniesienia do nich w Internecie i próbuję wymyślić:uint24_t i uint48_t w MinGW

  1. Który nagłówek muszę dla nich uwzględnić.
  2. Bez względu na to, czy są one wieloplatformowe (przynajmniej w systemach Windows, Linux i Mac OSX), czy tylko w przypadku określonych celów.
  3. Jakie są ich imiona. uint24_t, __uint24, __uint24_t?
+2

Możesz znaleźć przykładową implementację 'uint24_t' [here] (http://www.cs.kent.edu/~ruttan/GamePracticum/Raknet/Doc/html/_rak_net_types_8h_source.html) wokół linii 406. –

+0

Dzięki , mój kod robi coś podobnego, kiedy googlowałem i natknąłem się na referencje GCC do wbudowanego (niestandardowego) rozszerzenia. Chciałbym móc znaleźć więcej informacji na ten temat. = ( –

Odpowiedz

9

Standardowe typy uintXX_t są dostępne w stdint.h (C, C++ 98) lub cstdint (C++ 11).

W 8-bitowych danych, 24-bitowej architekturze AVR adresu, GCC zapewnia wbudowaną 24-bitową liczbę całkowitą, ale nie jest przenośny. Zobacz http://gcc.gnu.org/wiki/avr-gcc, aby uzyskać więcej informacji na ten temat.

Nie ma standardowych 24-bitowych lub 48-bitowych typów całkowitych udostępnianych przez GCC lub MinGW w sposób niezależny od platformy, ale jednym prostym sposobem na uzyskanie przenośnego 24-bitowego numeru na prawie każdej platformie jest użycie bitfielda :

struct bitfield24 { 
    uint32_t value : 24; 
}; 

bitfield24 a; 
a.value = 0xffffff; 
a.value += 1; 
assert(a == 0); 

To samo można zrobić dla 48-bitów, używając uint64_t jako podstawy.

+0

Tak, słyszałem o tej metodzie, chociaż jest znacznie mniej przyjemne, ale google podpowiedzi w różnych miejscach, gdzie GCC został załatany typami całkowitymi __uint24 (nigdy nie natrafiłem na wersję 48-bitową) .Nie wiem, czy były to nieoficjalne łatki lub specyficzna dziwna architektura –

+1

@Jeśli masz rację - wygląda na to, że w GCC jest wbudowany 24-bitowy typ architektury AVR, który wydaje się być głównie przeznaczony do manipulacji adresami z specjalne instrukcje, ponieważ AVR jest ośmiobitową, 24-bitową architekturą adresów, ale jeśli chcesz coś przenośnego, będziesz musiał użyć czegoś w rodzaju techniki, którą zamieściłem, lub rozwijając swoją własną klasę całkowitą przeciążenie operatora – wjl

+0

Dzięki, niestety doszedłem do wniosku, że nie jestem przeciwny rozwijaniu własnych klas, ale dla małych natywnych typów danych mam wrażenie, że każde domowe rozwiązanie jest niezgrabne. –