我正在尝试:
.carousel-item,.active{
height:100vh;
width:100%;
overflow:hidden;
margin:0;
padding:0;
-webkit-transition: 0.6s ease-in-out left;
transition: 0.6s ease-in-out left;
}
我得到的是
BYTE test[] = {0x00,0x00,0x00,0x00};
*(test+1) = 0xFFFF;
我期望或想要实现的目标:
00000000 11111111 00000000 00000000
背景: 在程序的一部分中,我需要将WORD插入数组的一部分。 是的,通常我可以做
00000000 11111111 11111111 00000000
但是我想知道是否有可能像第一个示例那样以单线方式执行此操作。 Memcpy在这里是没有选择的,因为我需要为第二个数组分配空间。
答案 0 :(得分:5)
在这种情况下,memset(test+1, 0xFF, 2)
应该可以工作。
答案 1 :(得分:5)
您的选择是
test[1] = 0xFF;
test[2] = 0xFF;
memset(test + 1, 0xFF, 2);
const char bytes[2] = {0xFF, 0xFF};
memcpy(test + 1, bytes, 2);
uint16_t value = 0xFFFF; // beware of byte order
memcpy(test + 1, &value, 2);
memcpy(test + 1, (const unsigned char []){0xFF, 0xFF}, 2));
或任何其他单独处理各个字节的代码。
什么不是 选项是:
*(uint16_t)&test[1] = 0xFFFF;
原因很简单:它打破了C语言中的两个规则:严格别名和对齐。更糟糕的是,您可以在代码的 this 部分中摆脱它,但是dereferencing unaligned uint16_t
pointers is never safe, even on x86-64 that supposedly supports unaligned accesses
答案 2 :(得分:-1)
#define modify(dest,src,pos) do { unsigned char *tmp =(void *)&dest; memcpy(tmp + pos,&src, sizeof(src));}while(0)
void *modify1(void *dest, void *src, size_t pos, size_t len)
{
unsigned char *tmp = dest;
memcpy(tmp + pos, src, len);
return tmp + pos;
}
示例:
char x[10];
short y = 0xffff;
modify(x,y,3);
or modify1(x,&y, 3, sizeof(y));
请注意,宏一并不能在所有情况下都起作用。
答案 3 :(得分:-2)
以下代码是通用解决方案,可让您将2字节(16位)的值写入数组的连续单元:
uint16 data = 0xFFFF;
BYTE test[] = {0x00,0x00,0x00,0x00};
*(test+1) = data & 0xFF;
*(test+2) = data >> 8;
结果将是:
00000000 11111111 11111111 00000000
因此只需更改data
的值即可。