因此,如果我有一个4字节的数字(比如十六进制)并且希望将一个字节说DD存储到十六进制中,在第n个字节位置而不改变十六进制数的其他元素,那么最简单的方法是什么?我猜它是按位运算的一些组合,但我对它们还是很新的,到目前为止它们发现它们很混乱?
答案 0 :(得分:4)
byte n = 0xDD;
uint i = 0x12345678;
i = (i & ~0x0000FF00) | ((uint)n << 8);
编辑:忘记提及,如果您使用签名数据类型执行此操作时要小心,这样就不会无意中对符号进行扩展。
答案 1 :(得分:1)
Mehrdad的回答显示了如何通过位操作来完成它。你也可以使用旧的字节数组技巧(假设C或其他允许这种愚蠢的语言):
byte n = 0xDD;
uint i = 0x12345678;
byte *b = (byte*)&i;
b[1] = n;
当然,那个大端机器中特定于处理器的字节与little-endian相反。此外,这种技术限制您处理精确的字节边界,而位操作将允许您修改任何给定的8位。也就是说,您可能希望将0x12345678
变为0x12345DD8
,我展示的技术将不会这样做。