C# 如何将10位强度移动到16位像素的顶部?
我有一个10位强度值的C# 如何将10位强度移动到16位像素的顶部?,c#,.net,C#,.net,我有一个10位强度值的UInt16[10001000]数组,我希望将其从位0-9向上移动六位到位6-15。做这件事的快速方法是什么?如果使用指针直接访问,则使用32位或64位整数并对其进行移位。应该给出相同的结果,但我希望它会快一点(因子2左右)。另一个加速应该来自避免复杂的索引逻辑访问2D数组 大概是这样的: fixed(UInt16* p0=&arr) { UInt32* p=(UInt32*)p0; UInt32* p_end=p+1000*1000/(sizeof
UInt16[10001000]
数组,我希望将其从位0-9向上移动六位到位6-15。做这件事的快速方法是什么?如果使用指针直接访问,则使用32位或64位整数并对其进行移位。应该给出相同的结果,但我希望它会快一点(因子2左右)。另一个加速应该来自避免复杂的索引逻辑访问2D数组
大概是这样的:
fixed(UInt16* p0=&arr)
{
UInt32* p=(UInt32*)p0;
UInt32* p_end=p+1000*1000/(sizeof(UInt32)/sizeof(UInt16));
while(p!=p_end)
{
*p = *p << 6;
}
}
fixed(UInt16*p0=&arr)
{
UInt32*p=(UInt32*)p0;
UInt32*p_end=p+1000*1000/(sizeof(UInt32)/sizeof(UInt16));
while(p!=p_end)
{
*p=*p无论您使用什么解决方案,都可以通过使用多个线程来加快速度。只是不要锁定同一个对象,以某种方式将数据分开。谢谢。我希望有一些本机代码库函数可以提供2倍以上的速度。@ChrisJJ它快了多少?系数2只是保守估计。