C# 在c中将Sbyte转换为整数#
我似乎想不出一种方法来将一个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
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:insteadint 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);