|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
[C] bit shit
Ho qualche dubbio sullo shift del C
ho un buffer di 128*128 bit, ogni bit corrisponde ad una casella di una matrice 128*128 Devo leggere il buffer e, per ogni bit, se 1 setto la relativa casella della matrice a 1 altrimenti a 0. Il buffer è unsigned char. Qual'è il sistema piú efficace ? grazie
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
spero di aver capito cosa ti serviva, ma non ho capito perchè parlavi di shift... comunque il titolo mi ha fatto morire dal ridere ![]() |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
Certo che ti stan proprio sulle balle sti bit
![]()
__________________
![]() ![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() vabbè, lapsus, stavo smadonnando ![]() buf[i][j] non va bene perchè il buffer è un array
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
in buf[i] ci sono 8 bits, ognuno corrisponde ad una casella della matrice
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1454
|
fammi capire la struttura dati sarebbe unsigned char[128][16]? (16*8=128)
oppure un array su una sola dimensione: unsigned char[2048]? ((128/8)*128=2048) Ultima modifica di Furla : 30-10-2007 alle 14:30. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
allora, spiego meglio e poi posto quello che sto facendo.
Ho un buffer unsigned char lungo 2048 bits. Il primo bit corrisponde alla casella [0][0] della matrice, il secondo alla [0][1] etc etc. Quindi devo leggere tutti i bits, uno dopo l'altro ed assegnare 1 oppure 0 alla relativa casella
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
non l'ho detto io (ma l'ho pensato)
![]() ma è normale, uno pensa di sapere ste cose ma non le usa mai, una volta che le devi scrivere diventa un casino. E non trovo esempi in rete
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
leggi buf[i], poi per j che va da 0 a 7 testi il bit j-esimo in buf[i] e scrivi in matrice[i * 8 / 128][(i * 8 % 128) + j]
spero di non aver detto altre cazzate |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
![]() il fatto è che ti fai una rappresentazione mentale semplicissima che però non corrisponde alle strutture dati in memoria |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
puoi sempre tenere due contatori, uno per la riga e uno per la colonna, da incrementare in modo opportuno
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
alla fine ho fatto cosí: Codice:
for( y = 0; y < 128; y++) { for( x = 0; x < 128; x++, c >>= 1) { if ((x) % 8 == 0) { n++; c = s[n]; } mat[y][x] = c & 0x01; } } ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
ragionavo dalla prospettiva sbagliata: dal buffer alla matrice... pensando al contrario il codice risulta molto più semplice e leggibile... bravo |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
perfetto, ieri ho fatto le mie funzioni per la matrice, le maschere AND e OR etc etc e ... son cambiate le specifiche (con tanto di litigata col tipo "so tutto io")
non è più una matrice 128 * 128 di interi ma ... di bit. quindi ho pensato: non faccio una matrice ma un buffer identico a quello che mi arriva così faccio una memcpy e taglio la testa al toro, ma c'è un problema: il buffer di bit che mi arriva deve essere copiato nel mio buffer passando attraverso 2 maschere di bit (AND e OR) quindi chiedo: esiste una memcpy speciale che utilizza maschere di bit ? non so se mi sono capito bene ![]() posso farmela anche da solo ma se esiste già di sistema sicuramente è più veloce
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:43.