如果我想位5
由3整数移位,所以int a = 5; int b = a << 3;
,其结果将是40
十进制作为5
是101
和40
是101000
。位位移char数组
如果不过,我有以下char
阵列: 00000 00101
和比特移位三到左边,我想要的结果是00001 01000
。所以我想要适应0
的填充。你有什么建议?
如果我想位5
由3整数移位,所以int a = 5; int b = a << 3;
,其结果将是40
十进制作为5
是101
和40
是101000
。位位移char数组
如果不过,我有以下char
阵列: 00000 00101
和比特移位三到左边,我想要的结果是00001 01000
。所以我想要适应0
的填充。你有什么建议?
如果你的意思是一个实际的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"
访问缓冲区16位的指针,使用htons取尾数的保健问题
char c[2] = {0, 5};
uint16_t* p16 = (uint16_t*)c;
*p16 = htons((ntohs(*p16) << 3));
你正在向右移动,而不是向左移动,并且溢出了数组,因为你'memmove()''length'字节,而不是'length - shift'。 – Dave
谢谢,我看到您的第一条评论,并将其修复了几分钟。前。编辑:我正在向左转。我测试过了。 – Mysticial
是的,我在智慧上翻转了'src'和'dst'的顺序。您当前的代码是正确的。 – Dave