Converting sbyte to byte
Solution 1
unchecked
{
sbyte s;
s= (sbyte)"your value";
byte b=(byte)s;
}
More about unchecked
is here
Solution 2
Let me clarify the unchecked
business. The MSDN page states that unchecked
is used to prevent overflow checking, which would otherwise, when inside a checked context, give a compile error or throw an exception.
...IF inside a checked context.
The context is checked either explicitly:
checked { ... }
or implicitly*, when dealing with compile-time constants:
byte b = (byte)-6; //compile error
byte b2 = (byte)(200 + 200); //compile error
int i = int.MaxValue + 10; //compiler error
But when dealing with runtime variables, the context is unchecked
by default**:
sbyte sb = -6;
byte b = (byte)sb; //no problem, sb is a variable
int i = int.MaxValue;
int j = i + 10; //no problem, i is a variable
To summarize and answer the original question:
Need byte<->sbyte
conversion on constants? Use unchecked
and cast:
byte b = unchecked( (byte) -6 );
Need byte<->sbyte
conversion on variables? Just cast:
sbyte sb = -6;
byte b = (byte) sb;
* There is a third way to get a checked context by default: by tweaking the compiler settings. E.g. Visual Studio -> Project properties -> Build -> Advanced... -> [X] Check for arithmetic overflow/underflow
** The runtime context is unchecked by default in C#. In VB.NET for example, the default runtime context is CHECKED.
Solution 3
unchecked
{
sbyte s = (sbyte)250; //-6 (11111010)
byte b = (byte)s; //again 250 (11111010)
}
Solution 4
like this:
sbyte sb = 0xFF;
byte b = unchecked((byte)sb);
![Shamim Hafiz - MSFT](https://i.stack.imgur.com/5rbZ9.png?s=256&g=1)
Comments
-
Shamim Hafiz - MSFT about 2 years
I have a variable of type
sbyte
and would like to copy the content to abyte
. The conversion wouldn't be a value conversion, rather a bit per bit copy.For example,
if mySbyte in bits is: '10101100', after conversion, the corresponding byte variable will also contain the bits '10101100'.