From 7e8950ea5207969d0c71b9befac20e877f00eb6c Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 1 Feb 2024 15:04:36 +0000 Subject: [PATCH] Clean up `BytesToHexString` --- .../config/NES/NESSyncSettingsForm.cs | 11 +++----- .../tools/HexEditor/HexFind.cs | 25 +++++-------------- .../Extensions/BufferExtensions.cs | 21 ++++++++-------- 3 files changed, 20 insertions(+), 37 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/config/NES/NESSyncSettingsForm.cs b/src/BizHawk.Client.EmuHawk/config/NES/NESSyncSettingsForm.cs index 87653e1210..76a8d0bc78 100644 --- a/src/BizHawk.Client.EmuHawk/config/NES/NESSyncSettingsForm.cs +++ b/src/BizHawk.Client.EmuHawk/config/NES/NESSyncSettingsForm.cs @@ -5,6 +5,7 @@ using System.Text; using System.Windows.Forms; using BizHawk.Client.Common; +using BizHawk.Common.BufferExtensions; using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Nintendo.NES; @@ -48,15 +49,9 @@ namespace BizHawk.Client.EmuHawk RegionComboBox.Items.AddRange(Enum.GetNames(typeof(NES.NESSyncSettings.Region)).Cast().ToArray()); RegionComboBox.SelectedItem = Enum.GetName(typeof(NES.NESSyncSettings.Region), _syncSettings.RegionOverride); - if (_syncSettings.InitialWRamStatePattern != null && _syncSettings.InitialWRamStatePattern.Any()) + if (_syncSettings.InitialWRamStatePattern is { Count: > 0 } initWRAMPattern) { - var sb = new StringBuilder(); - foreach (var b in _syncSettings.InitialWRamStatePattern) - { - sb.Append($"{b:X2}"); - } - - RamPatternOverrideBox.Text = sb.ToString(); + RamPatternOverrideBox.Text = initWRAMPattern.BytesToHexString(); } } diff --git a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexFind.cs b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexFind.cs index 2ef951eb13..61280758fc 100644 --- a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexFind.cs +++ b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexFind.cs @@ -3,6 +3,8 @@ using System.Drawing; using System.Text; using System.Windows.Forms; +using BizHawk.Common.BufferExtensions; + namespace BizHawk.Client.EmuHawk { public partial class HexFind : Form @@ -47,25 +49,10 @@ namespace BizHawk.Client.EmuHawk private string GetFindBoxChars() { - if (string.IsNullOrWhiteSpace(FindBox.Text)) - { - return ""; - } - - if (HexRadio.Checked) - { - return FindBox.Text; - } - - var bytes = _hexEditor.ConvertTextToBytes(FindBox.Text); - - var byteString = new StringBuilder(); - foreach (var b in bytes) - { - byteString.Append($"{b:X2}"); - } - - return byteString.ToString(); + var text = FindBox.Text; + if (string.IsNullOrWhiteSpace(text)) return string.Empty; + if (HexRadio.Checked) return text; + return _hexEditor.ConvertTextToBytes(text).BytesToHexString(); } private void Find_Prev_Click(object sender, EventArgs e) diff --git a/src/BizHawk.Common/Extensions/BufferExtensions.cs b/src/BizHawk.Common/Extensions/BufferExtensions.cs index b0a0c2b1f1..43b16777da 100644 --- a/src/BizHawk.Common/Extensions/BufferExtensions.cs +++ b/src/BizHawk.Common/Extensions/BufferExtensions.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; namespace BizHawk.Common.BufferExtensions @@ -50,20 +52,19 @@ namespace BizHawk.Common.BufferExtensions } } - /// - /// Converts bytes to an uppercase string of hex numbers in upper case without any spacing or anything - /// - public static string BytesToHexString(this byte[] bytes) + /// Creates a string containing the hexadecimal representation of + /// Output format is all-uppercase, no spaces, padded to an even number of nybbles, no prefix + public static string BytesToHexString(this ReadOnlySpan bytes) { - var sb = new StringBuilder(); - foreach (var b in bytes) - { - sb.AppendFormat("{0:X2}", b); - } - + StringBuilder sb = new(capacity: 2 * bytes.Length, maxCapacity: 2 * bytes.Length); + for (var i = 0; i < bytes.Length; i++) sb.AppendFormat("{0:X2}", bytes[i]); return sb.ToString(); } + /// + public static string BytesToHexString(this IReadOnlyList bytes) + => BytesToHexString(bytes is byte[] a ? a.AsSpan() : bytes.ToArray()); + public static bool FindBytes(this byte[] array, byte[] pattern) { var fidx = 0;