• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana tablicy INT na INT 32bitowy

Cloud VPS
0 głosów
1,120 wizyt
pytanie zadane 9 czerwca 2016 w C i C++ przez Royd Obywatel (1,250 p.)

Witam Serdecznie,

Posiadam tablice w C 

uint8_t tablica[9]={9,8,7,6,5,4,3,2,1};

Chciałbym z tej tablicy stworzyć jedna liczbę uint32_t, aby równała się =987654321

 

Jak to najszybciej i najlepiej zrobić?

5 odpowiedzi

0 głosów
odpowiedź 9 czerwca 2016 przez obl Maniak (51,300 p.)
wybrane 9 czerwca 2016 przez Royd
 
Najlepsza
char tablica[9] = {9, 8, 7, 6, 5, 4, 3, 2, 1}; // uint_8 to zwykły char
int liczba = 0; // Nasz ostateczny wynik
int k = 1;
for(int i = 0; i < 9; i++)
{
    liczba += (int)tablica[8 - i] * k; // Rzutuję char na int (wychodzi wtedy int o wartości liczby z tablicy) i mnożę go przez odpowiednie potęgi liczby 10 (gdyż każda liczba dziesiętna to suma takich iloczynów)
    k *= 10;
}

Przerobiłem nieco kod Patrycjer, tak że teraz nie potrzebujesz już funkcji pow.

komentarz 9 czerwca 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
A czy pętla, w której iterator i się zmniejsza nie będzie ciutkę wydajniejsza? Nie trzeba będzie przecież obliczać żadnych 8 - i :)
komentarz 11 czerwca 2016 przez obl Maniak (51,300 p.)

Ano będzie, choć różnica nie będzie wyczuwalna na komputerze, ale na mikrokontrolerze to może robić różnicę.

char tablica[9] = {9, 8, 7, 6, 5, 4, 3, 2, 1}; // uint_8 to zwykły char
int liczba = 0; // Nasz ostateczny wynik
int k = 1;
for(int i = 8; i > -1; i--)
{
    liczba += (int)tablica[i] * k; // Rzutuję char na int (wychodzi wtedy int o wartości liczby z tablicy) i mnożę go przez odpowiednie potęgi liczby 10 (gdyż każda liczba dziesiętna to suma takich iloczynów)
    k *= 10;
}

 

0 głosów
odpowiedź 9 czerwca 2016 przez Patrycjerz Mędrzec (192,320 p.)
char tablica[9] = {9, 8, 7, 6, 5, 4, 3, 2, 1}; // uint_8 to zwykły char
int liczba = 0; // Nasz ostateczny wynik
for(int i = 0; i < 9; i++)
{
	liczba += (int)tablica[8 - i] * pow(10, i); // Rzutuję char na int (wychodzi wtedy int o wartości liczby z tablicy) i mnożę go przez odpowiednie potęgi liczby 10 (gdyż każda liczba dziesiętna to suma takich iloczynów)
}
0 głosów
odpowiedź 9 czerwca 2016 przez jpacanowski VIP (101,940 p.)
0 głosów
odpowiedź 9 czerwca 2016 przez Royd Obywatel (1,250 p.)
Nie mogę tak zrobić ponieważ biblioteka Math.h zajmuje mi aż 4kb flasha. To dla mnie bardzo dużo. Nie da sie inaczej?
komentarz 9 czerwca 2016 przez Patrycjerz Mędrzec (192,320 p.)
Zdefiniuj własną funkcję potęgującą (raptem jedna pętla).
komentarz 9 czerwca 2016 przez jpacanowski VIP (101,940 p.)
A funkcji pow() nie możesz sam napisać?
0 głosów
odpowiedź 9 czerwca 2016 przez Royd Obywatel (1,250 p.)
Zrobiłem to inaczej.

Poskładałem wszystkie zmienne z tablicy int to tablicy char i funkcja atoi przerobiłem i tez działa.

Pytanie dodatkowe co robi polecenie (int)tablica? Rzutuje tablice na int? Nie koniecznie czaje
komentarz 11 czerwca 2016 przez obl Maniak (51,300 p.)

Tak, funkcja atoi zamienia liczbę zapisaną w ciągu znaków char[] na typ long tylko jakby to nie jest dobre rozwiązanie bo najpierw dziewięć cyfr zamieniasz na chary, łączysz je a później zamieniasz na int - mało wydajne rozwiązanie.

jeżeli masz:

int tablica[] = {1,2,3,4,5,6,7,8,9};

to (int)tablica rzutuje wskaźnik (adres początku tablicy) na typ int. Ot i cała tajemnica.

Podobne pytania

0 głosów
3 odpowiedzi 211 wizyt
pytanie zadane 8 maja 2020 w Java przez jasper93 Obywatel (1,310 p.)
0 głosów
3 odpowiedzi 513 wizyt
pytanie zadane 25 lutego 2016 w C i C++ przez igor1988bb Użytkownik (800 p.)
0 głosów
3 odpowiedzi 751 wizyt
pytanie zadane 8 stycznia 2016 w C i C++ przez Konrad Nabożny Stary wyjadacz (13,480 p.)

93,485 zapytań

142,417 odpowiedzi

322,763 komentarzy

62,896 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...