Converting sbyte to byte

13,029

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);
Share:
13,029
Shamim Hafiz - MSFT
Author by

Shamim Hafiz - MSFT

Help and get helped

Updated on June 01, 2022

Comments

  • Shamim Hafiz - MSFT
    Shamim Hafiz - MSFT about 2 years

    I have a variable of type sbyte and would like to copy the content to a byte. 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'.