SystemUtils.cs
上传用户:tjjgrl
上传日期:2019-04-04
资源大小:1010k
文件大小:9k
源码类别:

电子政务应用

开发平台:

C#

  1. using System;
  2. namespace ThoughtWorks.QRCode.Codec.Util
  3. {
  4.     /// <summary>
  5.     /// Contains conversion support elements such as classes, interfaces and static methods.
  6.     /// </summary>
  7.     public class SystemUtils
  8.     {
  9.         /// <summary>Reads a number of characters from the current source Stream and writes the data to the target array at the specified index.</summary>
  10.         /// <param name="sourceStream">The source Stream to read from.</param>
  11.         /// <param name="target">Contains the array of characteres read from the source Stream.</param>
  12.         /// <param name="start">The starting index of the target array.</param>
  13.         /// <param name="count">The maximum number of characters to read from the source Stream.</param>
  14.         /// <returns>The number of characters read. The number will be less than or equal to count depending on the data available in the source Stream. Returns -1 if the end of the stream is reached.</returns>
  15.         public static System.Int32 ReadInput(System.IO.Stream sourceStream, sbyte[] target, int start, int count)
  16.         {
  17.             // Returns 0 bytes if not enough space in target
  18.             if (target.Length == 0)
  19.                 return 0;
  20.             byte[] receiver = new byte[target.Length];
  21.             int bytesRead = sourceStream.Read(receiver, start, count);
  22.             // Returns -1 if EOF
  23.             if (bytesRead == 0)
  24.                 return -1;
  25.             for (int i = start; i < start + bytesRead; i++)
  26.                 target[i] = (sbyte)receiver[i];
  27.             return bytesRead;
  28.         }
  29.         /// <summary>Reads a number of characters from the current source TextReader and writes the data to the target array at the specified index.</summary>
  30.         /// <param name="sourceTextReader">The source TextReader to read from</param>
  31.         /// <param name="target">Contains the array of characteres read from the source TextReader.</param>
  32.         /// <param name="start">The starting index of the target array.</param>
  33.         /// <param name="count">The maximum number of characters to read from the source TextReader.</param>
  34.         /// <returns>The number of characters read. The number will be less than or equal to count depending on the data available in the source TextReader. Returns -1 if the end of the stream is reached.</returns>
  35.         public static System.Int32 ReadInput(System.IO.TextReader sourceTextReader, short[] target, int start, int count)
  36.         {
  37.             // Returns 0 bytes if not enough space in target
  38.             if (target.Length == 0) return 0;
  39.             char[] charArray = new char[target.Length];
  40.             int bytesRead = sourceTextReader.Read(charArray, start, count);
  41.             // Returns -1 if EOF
  42.             if (bytesRead == 0) return -1;
  43.             for (int index = start; index < start + bytesRead; index++)
  44.                 target[index] = (short)charArray[index];
  45.             return bytesRead;
  46.         }
  47.         /*******************************/
  48.         /// <summary>
  49.         /// Writes the exception stack trace to the received stream
  50.         /// </summary>
  51.         /// <param name="throwable">Exception to obtain information from</param>
  52.         /// <param name="stream">Output sream used to write to</param>
  53.         public static void WriteStackTrace(System.Exception throwable, System.IO.TextWriter stream)
  54.         {
  55.             stream.Write(throwable.StackTrace);
  56.             stream.Flush();
  57.         }
  58.         /// <summary>
  59.         /// Performs an unsigned bitwise right shift with the specified number
  60.         /// </summary>
  61.         /// <param name="number">Number to operate on</param>
  62.         /// <param name="bits">Ammount of bits to shift</param>
  63.         /// <returns>The resulting number from the shift operation</returns>
  64.         public static int URShift(int number, int bits)
  65.         {
  66.             if (number >= 0)
  67.                 return number >> bits;
  68.             else
  69.                 return (number >> bits) + (2 << ~bits);
  70.         }
  71.         /// <summary>
  72.         /// Performs an unsigned bitwise right shift with the specified number
  73.         /// </summary>
  74.         /// <param name="number">Number to operate on</param>
  75.         /// <param name="bits">Ammount of bits to shift</param>
  76.         /// <returns>The resulting number from the shift operation</returns>
  77.         public static int URShift(int number, long bits)
  78.         {
  79.             return URShift(number, (int)bits);
  80.         }
  81.         /// <summary>
  82.         /// Performs an unsigned bitwise right shift with the specified number
  83.         /// </summary>
  84.         /// <param name="number">Number to operate on</param>
  85.         /// <param name="bits">Ammount of bits to shift</param>
  86.         /// <returns>The resulting number from the shift operation</returns>
  87.         public static long URShift(long number, int bits)
  88.         {
  89.             if (number >= 0)
  90.                 return number >> bits;
  91.             else
  92.                 return (number >> bits) + (2L << ~bits);
  93.         }
  94.         /// <summary>
  95.         /// Performs an unsigned bitwise right shift with the specified number
  96.         /// </summary>
  97.         /// <param name="number">Number to operate on</param>
  98.         /// <param name="bits">Ammount of bits to shift</param>
  99.         /// <returns>The resulting number from the shift operation</returns>
  100.         public static long URShift(long number, long bits)
  101.         {
  102.             return URShift(number, (int)bits);
  103.         }
  104.         /*******************************/
  105.         /// <summary>
  106.         /// Converts an array of sbytes to an array of bytes
  107.         /// </summary>
  108.         /// <param name="sbyteArray">The array of sbytes to be converted</param>
  109.         /// <returns>The new array of bytes</returns>
  110.         public static byte[] ToByteArray(sbyte[] sbyteArray)
  111.         {
  112.             byte[] byteArray = null;
  113.             if (sbyteArray != null)
  114.             {
  115.                 byteArray = new byte[sbyteArray.Length];
  116.                 for (int index = 0; index < sbyteArray.Length; index++)
  117.                     byteArray[index] = (byte)sbyteArray[index];
  118.             }
  119.             return byteArray;
  120.         }
  121.         /// <summary>
  122.         /// Converts a string to an array of bytes
  123.         /// </summary>
  124.         /// <param name="sourceString">The string to be converted</param>
  125.         /// <returns>The new array of bytes</returns>
  126.         public static byte[] ToByteArray(String sourceString)
  127.         {
  128.             return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString);
  129.         }
  130.         /// <summary>
  131.         /// Converts a array of object-type instances to a byte-type array.
  132.         /// </summary>
  133.         /// <param name="tempObjectArray">Array to convert.</param>
  134.         /// <returns>An array of byte type elements.</returns>
  135.         public static byte[] ToByteArray(System.Object[] tempObjectArray)
  136.         {
  137.             byte[] byteArray = null;
  138.             if (tempObjectArray != null)
  139.             {
  140.                 byteArray = new byte[tempObjectArray.Length];
  141.                 for (int index = 0; index < tempObjectArray.Length; index++)
  142.                     byteArray[index] = (byte)tempObjectArray[index];
  143.             }
  144.             return byteArray;
  145.         }
  146.         /*******************************/
  147.         /// <summary>
  148.         /// Receives a byte array and returns it transformed in an sbyte array
  149.         /// </summary>
  150.         /// <param name="byteArray">Byte array to process</param>
  151.         /// <returns>The transformed array</returns>
  152.         public static sbyte[] ToSByteArray(byte[] byteArray)
  153.         {
  154.             sbyte[] sbyteArray = null;
  155.             if (byteArray != null)
  156.             {
  157.                 sbyteArray = new sbyte[byteArray.Length];
  158.                 for (int index = 0; index < byteArray.Length; index++)
  159.                     sbyteArray[index] = (sbyte)byteArray[index];
  160.             }
  161.             return sbyteArray;
  162.         }
  163.         /*******************************/
  164.         /// <summary>
  165.         /// Converts an array of sbytes to an array of chars
  166.         /// </summary>
  167.         /// <param name="sByteArray">The array of sbytes to convert</param>
  168.         /// <returns>The new array of chars</returns>
  169.         public static char[] ToCharArray(sbyte[] sByteArray)
  170.         {
  171.             return System.Text.UTF8Encoding.UTF8.GetChars(ToByteArray(sByteArray));
  172.         }
  173.         /// <summary>
  174.         /// Converts an array of bytes to an array of chars
  175.         /// </summary>
  176.         /// <param name="byteArray">The array of bytes to convert</param>
  177.         /// <returns>The new array of chars</returns>
  178.         public static char[] ToCharArray(byte[] byteArray)
  179.         {
  180.             return System.Text.UTF8Encoding.UTF8.GetChars(byteArray);
  181.         }
  182.     }
  183. }