C# 在c中将Sbyte转换为整数#

C# 在c中将Sbyte转换为整数#,c#,C#,我似乎想不出一种方法来将一个sbyte转换回原始整数值 int k = 148; sbyte t = (sbyte)k; int asd = Convert.ToInt32(t); asd值为-108。如何将sbyte转换回int以获得148的原始值 谢谢,sbyte保存的值从-128到127,因为第一位代表加号或减号。 先将sbyte转换为byte,然后转换为int int k = 148; sbyte t = (sbyte)k; int as

我似乎想不出一种方法来将一个sbyte转换回原始整数值

int k = 148;
sbyte t = (sbyte)k;
int asd = Convert.ToInt32(t);
asd值为-108。如何将sbyte转换回int以获得148的原始值


谢谢,sbyte保存的值从-128到127,因为第一位代表加号或减号。 先将sbyte转换为byte,然后转换为int

        int k = 148;
        sbyte t = (sbyte)k;
        int asd = (int)(byte)k;
        Assert.AreEqual(148, asd);

假设您希望结果在0-255(含0-255)范围内,最简单的方法是:

int asd = t & 0xff;
这将把
k
提升为
int
,然后只取底部的8位,将顶部的24位全部保留为0


但是,我想问一下,为什么您首先要使用
sbyte
。这很少是一个好主意——Java的设计缺陷之一(在我看来)是将
byte
变成有符号类型。如果要表示字节值,
byte
更合适。

由于sbyte在-128到127范围内,理想情况下,当返回值在0到255之间时,现有方法不应返回sbyte

但无论如何,您可以先尝试将
sbyte
转换为
byte
,然后再转换为
int

我想


我刚刚添加了k变量以便于说明。我没有访问k的权限,但我有访问t的权限,我想以某种方式将t转换回int。它正在将
t
转换回
int
。但是考虑到
t
只有256个可能值,而
k
有2^32个可能的原始值,您不能以无损的方式进行此操作。。。您知道吗,从一开始,
k
总是介于0和255之间(包括0和255)?如果是,为什么要使用
sbyte
?是的,k始终在0和255之间。sbyte是函数返回的值,我无法真正更改它。您确定
t
永远不会实际具有-108的值吗?很抱歉提供了误导性的信息。请看我上面的评论。我明白你的意思,但不幸的是,我没有选择权更改特定函数返回的内容。@Jon:instead
int asd=k&0xff不应该是
intasd=t&0xff
int k = 148;
sbyte t = (sbyte)k;
byte b=(byte)t;

Console.WriteLine(b);
Console.WriteLine();

int asd = Convert.ToInt32(b);       
Console.WriteLine(asd);