REM*_*rry 11 c# type-conversion
我试图将数组转换byte[]为sbyte[].
这是我的示例数组:
byte[] unsigned = { 0x00, 0xFF, 0x1F, 0x8F, 0x80 };
Run Code Online (Sandbox Code Playgroud)
我已经尝试过了:
sbyte[] signed = (sbyte[])((Array)unsigned);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.此操作后数组中没有值.
有人有更好的主意吗?
Sim*_*hid 20
sbyte[] signed = (sbyte[]) (Array) unsigned;
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为byte和sbyte在内存中具有相同的长度,并且可以在不需要更改内存表示的情况下进行转换.
但是,此方法可能会导致调试器出现一些奇怪的错误.如果你的字节数组不是很大,你可以Array.ConvertAll改用.
sbyte[] signed = Array.ConvertAll(unsigned, b => unchecked((sbyte)b));
Run Code Online (Sandbox Code Playgroud)
使用怎么样Buffer.BlockCopy?这个答案的好处是避免了逐字节的强制转换检查。这个答案的坏处是避免了逐字节的强制转换检查。
var unsigned = new byte[] { 0x00, 0xFF, 0x1F, 0x8F, 0x80 };
var signed = new sbyte[unsigned.Length];
Buffer.BlockCopy(unsigned, 0, signed, 0, unsigned.Length);
Run Code Online (Sandbox Code Playgroud)
这只是复制字节,上面的值byte.MaxValue将具有负值sbyte。
需要两行代码,但应该很快。
| 归档时间: |
|
| 查看次数: |
14190 次 |
| 最近记录: |