/// <summary>Takes a byte array and returns a hex-encoded string.</summary> /// <param name="data">Data to be encoded.</param> /// <param name="format">Output format.</param> /// <param name="hcase">Lowercase or uppercase.</param> /// <returns>Hex-encoded string.</returns> /// <remarks>Bit fiddling by CodeInChaos.</remarks> /// <remarks>This method don`t use libsodium, but it can be useful for generating human readable fingerprints.</remarks> public static string BinaryToHex(byte[] data, HexFormat format, HexCase hcase = HexCase.Lower) { var sb = new StringBuilder(); for (var i = 0; i < data.Length; i++) { if ((i != 0) && (format != HexFormat.None)) { switch (format) { case HexFormat.Colon: sb.Append((char)58); break; case HexFormat.Hyphen: sb.Append((char)45); break; case HexFormat.Space: sb.Append((char)32); break; default: //no formatting break; } } var byteValue = data[i] >> 4; if (hcase == HexCase.Lower) { sb.Append((char)(87 + byteValue + (((byteValue - 10) >> 31) & -39))); //lower } else { sb.Append((char)(55 + byteValue + (((byteValue - 10) >> 31) & -7))); //upper } byteValue = data[i] & 0xF; if (hcase == HexCase.Lower) { sb.Append((char)(87 + byteValue + (((byteValue - 10) >> 31) & -39))); //lower } else { sb.Append((char)(55 + byteValue + (((byteValue - 10) >> 31) & -7))); //upper } } return(sb.ToString()); }
public void IaPlay() { int i, j; string[] newname; if (HexGameManager.firstTurn) { PlayInFirstCol(); } else { newname = HexGameManager.lastPlayed.name.Split('-'); i = int.Parse(newname[0]); j = int.Parse(newname[1]); string choice = ""; // Calcul des choix possibles if ((i + 1 < (nbCases + 1)) && (j - 1 > 0) && GameObject.Find((i + 1) + "-" + (j - 1)).GetComponent <HexCase>().etat == 0) { choice = (i + 1) + "-" + (j - 1); } else if ((i + 1 < (nbCases + 1)) && GameObject.Find((i + 1) + "-" + j).GetComponent <HexCase>().etat == 0) { choice = (i + 1) + "-" + j; } else if ((j + 1 < (nbCases + 1)) && GameObject.Find(i + "-" + (j + 1)).GetComponent <HexCase>().etat == 0) { choice = i + "-" + (j + 1); } else if ((j - 1 > 1) && GameObject.Find(i + "-" + (j - 1)).GetComponent <HexCase>().etat == 0) { choice = i + "-" + (j - 1); } else { bool ok = false; while (!ok) { choice = Random.Range(2, (nbCases - 1)) + "-" + Random.Range(2, (nbCases - 1)); HexCase laCase = GameObject.Find(choice).GetComponent <HexCase>(); if (laCase.etat == 0) { ok = true; } } } SetPlayedCase(choice); } CheckIfAIWon(); }
/// <summary>Takes a byte array and returns a hex-encoded string.</summary> /// <param name="data">Data to be encoded.</param> /// <param name="format">Output format.</param> /// <param name="hcase">Lowercase or uppercase.</param> /// <returns>Hex-encoded string.</returns> /// <remarks>Bit fiddling by CodeInChaos.</remarks> /// <remarks>This method don`t use libsodium, but it can be useful for generating human readable fingerprints.</remarks> public static string BinaryToHex(byte[] data, HexFormat format, HexCase hcase = HexCase.Lower) { var sb = new StringBuilder(); for (var i = 0; i < data.Length; i++) { if ((i != 0) && (format != HexFormat.None)) { switch (format) { case HexFormat.Colon: sb.Append((char)58); break; case HexFormat.Hyphen: sb.Append((char)45); break; case HexFormat.Space: sb.Append((char)32); break; default: //no formatting break; } } var byteValue = data[i] >> 4; if (hcase == HexCase.Lower) { sb.Append((char)(87 + byteValue + (((byteValue - 10) >> 31) & -39))); //lower } else { sb.Append((char)(55 + byteValue + (((byteValue - 10) >> 31) & -7))); //upper } byteValue = data[i] & 0xF; if (hcase == HexCase.Lower) { sb.Append((char)(87 + byteValue + (((byteValue - 10) >> 31) & -39))); //lower } else { sb.Append((char)(55 + byteValue + (((byteValue - 10) >> 31) & -7))); //upper } } return sb.ToString(); }
/// <summary> /// Convert a byte array to a hex string. /// </summary> /// <param name="data">The byte array to be converted.</param> /// <param name="hCase">The case of the result hex string.</param> /// <returns>The result hex string.</returns> /// <remarks>Encoding to checksummed hex only supports 20 bytes long <paramref name="data" />.</remarks> public static string ToHex(this byte[] data, HexCase hCase = HexCase.Lowercase) { var result = new StringBuilder(data.Length * 2); var hexAlphabet = hCase == HexCase.Lowercase ? "0123456789abcdef" : "0123456789ABCDEF"; foreach (var b in data) { result.Append(hexAlphabet[b >> 4]); result.Append(hexAlphabet[b & 0xF]); } if (hCase != HexCase.Checksummed) { return(result.ToString()); } if (data.Length != 20) { throw new FormatException("Encoding to checksummed hex only supports 20 bytes long data."); } var checksum = new Keccak256Managed().ComputeHash(data).ToHex(); for (var x = 0; x <= 39; x++) { if (result[x] >= '0' && result[x] <= '9') { continue; } var lower = checksum[x] <= '7'; if (lower) { result[x] += (char)('a' - 'A'); } } return(result.ToString()); }