【发布时间】:2026-02-22 22:10:01
【问题描述】:
我正在使用 BitConverter.ToInt32 将 3 个 byte 值打包到 int 中,如下所示:
byte R = 0;
byte G = 0;
byte B = 0;
int i = BitConverter.ToInt32(new byte[] { R, G, B, 0 }, 0);
有没有一种更快的方法来做到这一点,而不是每次都创建一个新的int?从int 中获取字节很容易:
int i = 34234;
byte B = (byte)(i >> 0);
byte G = (byte)(i >> 8);
byte R = (byte)(i >> 16);
有没有一种简单的方法来扭转这个过程并使用位移将 RGB 字节写回现有的int?
【问题讨论】:
-
你为什么担心创建一个新的
int?创建int是免费的。需要关注的部分是每次创建一个新的byte[]。 -
@gabe:这只是示例代码。在实际代码中,我分配给一个预先实例化的类级字节数组。创建一个 int 实际上是免费的,但如果您要为数百个 320 x 240 数组执行此操作,则不是。位移速度明显快于 BitConverter.ToInt32。
-
您在这里对 RGB 和 BGR 进行卷积(两个代码 sn-ps 不往返)。
-
创建一个 int 并不是“实际上”免费的——它是完全免费的。 BitConverter 并不慢。将字节放入数组并进行 functino 调用是很慢的。
-
我终于对这个做了一些基准测试:*.com/questions/4326125/… 看来
BitConverter的函数调用开销相当大。
标签: c# bit-manipulation bitconverter