jjzjj

c# - 将 sbyte 转换为字节

我有一个sbyte类型的变量,想将内容复制到byte。转换不是值转换,而是一点一点的复制。例如,如果mySbyteinbits是:'10101100',转换后,相应的字节变量也将包含'10101100'位。 最佳答案 让我澄清一下unchecked商业。MSDNpage指出unchecked用于防止溢出检查,否则,在已检查的上下文中会产生编译错误或抛出异常。...IF在已检查的上下文中。显式检查上下文:checked{...}或隐式*,在处理编译时常量时:byteb=(byte)-6;//compileerrorbyteb2=(by

c# - 将 sbyte[] 转换为 bool[] 并将 char[] 转换为 short[]

有没有显式转换/强制转换sbyte[]或byte[]到bool[]char[]到short[]/ushort[]在CIL中,您经常会看到诸如stelemTypesbyte(ldlocpArray)ldc_i41ldc_i40正在执行pArray[1]=true,其中pArray是bool[]类型的一维数组。我想通过做在c#中复制它(sbyte[])pArray[1]=1;不幸的是,C#编译器不允许这样做。 最佳答案 未记录的技巧,风险自负:(例如here以及许多其他地方)[StructLayout(LayoutKind.Explic

c# - 为什么从 byte 到 sbyte 的转换会为优化代码提供错误的值?

安装NUnit3后,可以使用以下代码示例重现该问题。[TestFixture]publicclassSByteFixture{[Test]publicvoidTest(){vardata=newbyte[]{0xFF};sbytex=-128;data[0]=(byte)x;byteb1=data[0];varb2=(sbyte)b1;Assert.AreEqual(b1.ToString(),"128");Assert.AreEqual(b2.ToString(),"-128");}}该项目应该是一个类库,因为在控制台应用程序中它是不可复制的。应该启用优化,即csproj文件中的以下

c# - sbyte[] 可以神奇地转换为 byte[]

我不确定这是否是.NET错误,但我发现它真的很有趣。不出所料,我不能这样做:sbyte[]sbytes={1,2,3};byte[]bytes=sbytes;//fails:cannotconvertsourcetype'sbyte[]'totagettype'byte[]'但是,如果sbytes的类型是object,这会起作用:objectobj=newsbyte[]{1,2,3};byte[]bytes=objasbyte[];Assert.IsNull(bytes,"WTF??")备注1:int[]-uint[]和其他基本类型也会出现同样的问题。备注2:虽然代码将数组作为byte

c# - 为什么我可以将 sbyte 与所有其他数字类型*except* ulong 进行比较?

您可以在sbyte和byte、int、uint、short、ushort、long、double和float之间进行>、我的大脑在爆炸。谁能解释为什么sbyte可以与uint相比,但不是ulong?publicboolsbyte_ulong_compare(sbytex,ulongy){returnx此外,使用unchecked不会让事情变得更好。大脑融化。另一个编辑。这有效:publicboolsbyte_ulong_compare(sbytex,ulongy){////returnsx127)returntrue;return((long)x 最佳答案

c# - 如何在 C# 中将 sbyte[] 转换为 byte[]?

我有一个函数,它填充一个sbyte[]类型的数组,我需要将这个数组传递给另一个接受byte[]类型参数的函数。我能否在不复制所有数据或使用unsafe魔法的情况下又好又快地转换它? 最佳答案 是的,你可以。由于byte和sbyte具有相同的二进制表示,因此无需复制数据。只需转换为Array,然后将其转换为byte[]就足够了。sbyte[]signed={-2,-1,0,1,2};byte[]unsigned=(byte[])(Array)signed; 关于c#-如何在C#中将sbyt

c# - 为什么 C# 中的字节与其他整数类型不同,命名为 byte 和 sbyte?

刚刚翻了一下规范,发现byte是奇数。其他的有short、ushort、int、uint、long和ulong。为什么这里命名为sbyte和byte而不是byte和ubyte? 最佳答案 这是一个语义问题。当您想到一个字节时,您通常(至少我是这样)想到0-255之间的8位值。这就是byte的含义。二进制数据不太常见的解释是-128到127的带符号值(sbyte)。对于整数,根据带符号的值来思考更直观,所以这就是基本名称样式所代表的。u前缀允许访问不太常见的无符号语义。 关于c#-为什么C

c# - 在 C#/.NET 中,为什么 sbyte[] 与 byte[] 相同,只是它不是?

我刚刚在C#/.NET中观察到一个奇怪的现象。我创建了这个最小示例来演示:if(newsbyte[5]isbyte[]){thrownewApplicationException("Impossible!");}objecto=newsbyte[5];if(oisbyte[]){thrownewApplicationException("Why???");}这将抛出“为什么???”,但不会抛出“不可能!”。它适用于所有相同大小的整数类型数组。谁可以给我解释一下这个?我很困惑。顺便说一下,我正在使用.NET4。P.S.:我知道我可以通过使用o.GetType()==typeof(byte