2011-11-10 58 views
3

如果我想位5由3整数移位,所以int a = 5; int b = a << 3;,其结果将是40十进制作为510140101000位位移char数组

如果不过,我有以下char阵列: 00000 00101和比特移位三到左边,我想要的结果是00001 01000。所以我想要适应0的填充。你有什么建议?

回答

3

如果你的意思是一个实际的char数组,你可以使用memmove()memset()

char str[] = "0000000101"; 

int shift = 3; 
int length = strlen(str); 

memmove(str, str + shift,length - shift); 
memset(str + length - shift,'0',shift); 

// Result: 
// "0000101000" 
+0

你正在向右移动,而不是向左移动,并且溢出了数组,因为你'memmove()''length'字节,而不是'length - shift'。 – Dave

+0

谢谢,我看到您的第一条评论,并将其修复了几分钟。前。编辑:我正在向左转。我测试过了。 – Mysticial

+0

是的,我在智慧上翻转了'src'和'dst'的顺序。您当前的代码是正确的。 – Dave

1

访问缓冲区16位的指针,使用htons取尾数的保健问题

char c[2] = {0, 5}; 

uint16_t* p16 = (uint16_t*)c; 

*p16 = htons((ntohs(*p16) << 3));