dettus
Bicycle User
aaaargh!
leute, helft mir.
ich hab mal wieder ein triviales problem, an dem ich schlicht am verzweifeln bin...
folgendes:
ich habe zwei arrays von charactern
und jetzt brauche ich eine funktion, die n bits von bit x aus c nach bit y aus d kopiert.
fuer x,y,n mod 8=0 ist das also
kein problem. irgendwie wollen aber die anderen faelle nicht in meine birne rein!
oh, ja, die bitreihenfolge ist big endian.
die naive loesung sieht so aus:
auf jeden fall muss das doch auch irgendwie schneller gehen!
kann mir irgendwer bei dem uebergang bit->byte helfen?
leute, helft mir.
ich hab mal wieder ein triviales problem, an dem ich schlicht am verzweifeln bin...
folgendes:
ich habe zwei arrays von charactern
Code:
unsigned char c[1024];
unsigned char d[1024];
und jetzt brauche ich eine funktion, die n bits von bit x aus c nach bit y aus d kopiert.
fuer x,y,n mod 8=0 ist das also
Code:
memcpy(d+y/8,c+x/8,n/8);
kein problem. irgendwie wollen aber die anderen faelle nicht in meine birne rein!
oh, ja, die bitreihenfolge ist big endian.
die naive loesung sieht so aus:
Code:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned char z;
unsigned char b;
unsigned char c[10]={0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char d[10]={0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned int x=3;
unsigned int y=1;
unsigned int n=9;
unsigned int i;
printf("in> c:");
for (i=0;i<10;i++) printf("%02x ",c[i]);
printf("\n");
printf("in> d:");
for (i=0;i<10;i++) printf("%02x ",d[i]);
printf("\n");
z=d[y/8]>>(8-(y%8));
while (n)
{
b=(c[x/8]>>(7-x%8))&0x1;
z=(z<<1)|b;
x++;
y++;
if ((y%8)==0) {
d[y/8-1]=z;
z=0;
}
n--;
}
z<<=(8-(y%8));
d[y/8]=z;
printf("out> d:");
for (i=0;i<10;i++) printf("%02x ",d[i]);
printf("\n");
}
auf jeden fall muss das doch auch irgendwie schneller gehen!
kann mir irgendwer bei dem uebergang bit->byte helfen?
Last edited:


