コード例 #1
0
ファイル: IntUtils.cs プロジェクト: jluchiji/ebml
 /// <summary>
 ///     Pads a non standard unsigned integer to 64 bit.
 /// </summary>
 /// <param name="dat">UInt64 containing non standard integer</param>
 /// <param name="width">Width of the non standard integer</param>
 /// <returns></returns>
 public static UInt64 PadU64(UInt64 dat, Int32 width)
 {
     return dat.Bits(width - 1, 0);
 }
コード例 #2
0
ファイル: IntUtils.cs プロジェクト: jluchiji/ebml
        /// <summary>
        ///     Pads a non standard signed integer to 64 bit.
        /// </summary>
        /// <param name="dat">UInt64 containing non standard integer</param>
        /// <param name="width">Width of the non standard integer</param>
        /// <returns></returns>
        public static Int64 PadS64(UInt64 dat, Int32 width)
        {
            // Assuming that highest bit is sign bit
            Boolean sign = (dat & (1UL << width - 1)) != 0;
            UInt64 value = dat.Bits(width - 2, 0);

            // if the value is negative...
            if (sign)
                return (long) (value - ((ulong) Math.Pow(2, width - 1))); // Get 2's complement of the value

            // if it is positive, return value
            return (Int64) value;
        }