Как преобразовать число в int8, int16, int32, uint8, uint16 или uint32C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как преобразовать число в int8, int16, int32, uint8, uint16 или uint32

Сообщение Anonymous »

Числовая переменная в TypeScript имеет плавающую точку. Однако бывают случаи, когда необходимо ограничить переменную определенным размером или типом, аналогичным тому, что доступно в других языках. Например, типы int8, int16, int32, uint8, uint16 и uint32. Метод, который я реализовал, преобразует число в целое число без знака и выполняет поразрядное «И» для необходимых битов. В зависимости от того, подписан ли желаемый тип, он выполнит побитовое «ИЛИ». Если есть ошибка, напишите лучший способ или более эффективный метод.

Код: Выделить всё

export class CONVERT
{
static NumberToUint32(x:number):number
{
return x >>> 0;
}
static NumberToUint16(x:number):number
{
return this.NumberToUint32(x) & 0xFFFF;
}
static NumberToUint8(x:number):number
{
return this.NumberToUint32(x) & 0xFF;
}

static NumberToInt32(x:number): number
{
return x >> 0;
}
static NumberToInt16(x:number): number
{
let r: number = 0;
let n = this.NumberToUint16(x);
if(n & 0x8000)
r =  0xFFFF8000|(n&0x7FFF);
else
r = n;
return(r);
}
static NumberToInt8(x:number): number
{
let r: number = 0;
let n = this.NumberToUint8(x);
if(n & 0x80)
r =  0xFFFFFF80|(n&0x7F);
else
r = n;
return(r);
}

static StrToNumber(val: string, defaultVal:number = 0): number
{
let result:number = defaultVal;
if(val == null)
return result;
if(val.length == 0)
return result;
val = val.trim();
if(val.length == 0)
return(result);
let sign:number = 1;
//
// . obtain sign from string, and place result in "sign" local varible. The Sign naturally defaults to positive
//     1 for positive, -1 for negative.
// . remove sign character from val.
//      Note, before the function returns, the result is multiplied by the sign local variable to reflect the sign.
// . error check for multiple sign characters
// .  error check to make sure sign character is at the head or tail of the string
//
{
let positiveSignIndex = val.indexOf('+');
let negativeSignIndex = val.indexOf('-');
let nTailIndex = val.length-1;
//
// make sure both negative and positive signs are not in the string
//
if( (positiveSignIndex != -1) && (negativeSignIndex != -1) )
return result;
//
// handle postive sign
//
if (positiveSignIndex != -1)
{
//
// make sure there is only one sign character
//
if( (positiveSignIndex != val.lastIndexOf('+')) )
return result;
//
// make sure the sign is at the head or tail
//
if( (positiveSignIndex > 0) && (positiveSignIndex < nTailIndex )  )
return result;
//
// remove sign from string
//
val = val.replace("+","").trim();
}
//
// handle negative sign
//
if (negativeSignIndex != -1)
{
//
// make sure there is only one sign character
//
if( (negativeSignIndex != val.lastIndexOf('-')) )
return result;
//
// make sure the sign is at the head or tail
//
if( (negativeSignIndex > 0) && (negativeSignIndex < nTailIndex )  )
return result;
//
// remove sign from string
//
val = val.replace("-","").trim();
sign = -1;
}
//
// make sure text length is greater than 0
//
if(val.length == 0)
return result;
}
//
// convert string to a number
//
var r = +(val);
//
// apply sign if no errors
//
if( (r != null) && (!isNaN(r)) )
{
result = r*sign;
}
return(result);
}
}



Подробнее здесь: https://stackoverflow.com/questions/576 ... -or-uint32
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему сопоставление шаблонов совпадает Int16 [] uint16 [] в C#?
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать массивы UInt32[] и Int32[] в байтовые массивы?
    Anonymous » » в форуме C#
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать массивы UInt32[] и Int32[] в байтовые массивы?
    Anonymous » » в форуме C#
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Есть ли в C# int8 и uint8?
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между int, Int16, Int32 и Int64?
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»