如何使用VB.NET将签名字节(sbyte)写入非托管内存?
我可以使用Marshal.WriteByte()来写一个无符号字节,但对于有符号字节来说似乎并不重载。
答案 0 :(得分:0)
要将负的有符号字节转换为无符号字节,请将绝对值与255进行异或,并加1。
这是致电two's complement:
从-34开始, Abs(-34) - > 34, Xor 255 - > 221, + 1 - > 222
所以222具有与-34相同的二进制表示。
在框架中可能有更好的方法可以做到这一点,但上述方法应该有效。尝试一下,让我们都知道。
(并且可能不言而喻,但正的有符号字节具有与其无符号conterpart相同的二进制表示。因此,值为45的SByte具有与值为45的字节相同的表示。)