Advertisement
leo1553

Untitled

May 15th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.61 KB | None | 0 0
  1. class Program {
  2. static void Main(string[] args) {
  3.     byte[] byteArray = new byte[16];
  4.     float value = float.Parse(Console.ReadLine());
  5.  
  6.     Console.Clear();
  7.     Console.WriteLine("Value = {0}", value);
  8.     GetBytes(byteArray, 1, value);
  9.     Console.WriteLine("Byte Array = {0}", string.Join(" ", byteArray.Select(x => x.ToString("X")).ToArray()));
  10.  
  11.     float anotherValue;
  12.     FromBytes(byteArray, 1, out anotherValue);
  13.     Console.WriteLine("AnotherValue = {0}", anotherValue);
  14.  
  15.     anotherValue = BitConverter.ToSingle(byteArray, 1);
  16.     Console.WriteLine("AnotherValue = {0}", anotherValue);
  17.  
  18.     Console.ReadKey();
  19. }
  20.  
  21. //Maneira facil de entender
  22. static unsafe byte[] ToByteArray(float value) {
  23.     byte* valuePtr = (byte*)&value;
  24.     byte[] result = new byte[sizeof(float)];
  25.     for(int i = 0; i < result.Length; i++)
  26.         result[i] = *valuePtr++;
  27.     return result;
  28. }
  29.  
  30. static unsafe float FromByteArray(byte[] arr) {
  31.     float result;
  32.     byte* resultPtr = (byte*)&result;
  33.     for(int i = 0; i < sizeof(float); i++)
  34.         *(resultPtr++) = arr[i];
  35.     return result;
  36. }
  37.  
  38. //Maneira mais avançada
  39. static unsafe void GetBytes(byte[] array, uint offset, int value) {
  40.     if(array == null)
  41.         throw new ArgumentNullException("array");
  42.     if(array.Length < offset + sizeof(int))
  43.         throw new ArgumentOutOfRangeException("offset");
  44.  
  45.     fixed(byte* arrPtr = array)
  46.         *((int*)(arrPtr + offset)) = value;
  47. }
  48.  
  49. /*
  50. static unsafe void GetBytes(byte[] array, uint offset, int value) {
  51.     if(array == null)
  52.         throw new ArgumentNullException("array");
  53.     if(array.Length < offset + sizeof(int))
  54.         throw new ArgumentOutOfRangeException("offset");
  55.  
  56.     fixed(byte* arrPtr = &array[offset]) {
  57.         int* valPtr = (int*)arrPtr;
  58.         *valPtr = value;
  59.     }
  60. }
  61.     */
  62.  
  63. static unsafe void GetBytes(byte[] array, uint offset, float value) {
  64.     GetBytes(array, offset, *(int*)&value);
  65. }
  66.  
  67. static unsafe void FromBytes(byte[] array, uint offset, out int value) {
  68.     if(array == null)
  69.         throw new ArgumentNullException("array");
  70.     if(array.Length < offset + sizeof(int))
  71.         throw new ArgumentOutOfRangeException("offset");
  72.            
  73.     fixed(byte* arrPtr = array)
  74.         value = *((int*)(arrPtr + offset));
  75. }
  76.  
  77. static unsafe void FromBytes(byte[] array, uint offset, out float value) {
  78.     if(array == null)
  79.         throw new ArgumentNullException("array");
  80.     if(array.Length < offset + sizeof(int))
  81.         throw new ArgumentOutOfRangeException("offset");
  82.            
  83.     fixed (byte* arrPtr = array)
  84.         value = *((float*)(arrPtr + offset));
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement