diff --git a/PKHeX.Core/Util/Util.cs b/PKHeX.Core/Util/Util.cs index b8a71b330..c87e43906 100644 --- a/PKHeX.Core/Util/Util.cs +++ b/PKHeX.Core/Util/Util.cs @@ -123,15 +123,20 @@ namespace PKHeX.Core public static byte[] GetBytesFromHexString(string seed) { - return Enumerable.Range(0, seed.Length) - .Where(x => x % 2 == 0) - .Select(x => Convert.ToByte(seed.Substring(x, 2), 16)) - .Reverse().ToArray(); + byte[] result = new byte[seed.Length / 2]; + for (int i = 0; i < result.Length; i++) + { + var slice = seed.Substring(i * 2, 2); + result[i] = Convert.ToByte(slice, 16); + } + Array.Reverse(result); + return result; } public static string GetHexStringFromBytes(byte[] data, int offset, int length) { - data = data.Skip(offset).Take(length).Reverse().ToArray(); + data = data.Slice(offset, length); + Array.Reverse(data); return BitConverter.ToString(data).Replace("-", string.Empty); } diff --git a/Tests/PKHeX.Core.Tests/PKM/StringTests.cs b/Tests/PKHeX.Core.Tests/PKM/StringTests.cs index 32b5710d9..b07a76e08 100644 --- a/Tests/PKHeX.Core.Tests/PKM/StringTests.cs +++ b/Tests/PKHeX.Core.Tests/PKM/StringTests.cs @@ -49,12 +49,11 @@ namespace PKHeX.Tests.PKM CheckStringGetSet(nameof(pkm.Nickname), name_nidoran, pkm.Nickname, byte_nidoran, pkm.Nickname_Trash); } - private static void CheckStringGetSet(string check, string instr, string outstr, byte[] indata, - byte[] outdata) + private static void CheckStringGetSet(string check, string instr, string outstr, byte[] indata, byte[] outdata) { instr.Should().BeEquivalentTo(outstr); - outdata = outdata.Take(indata.Length).ToArray(); + outdata = outdata[..indata.Length]; indata.SequenceEqual(outdata).Should() .BeTrue($"expected {check} to set properly, instead got {string.Join(", ", outdata.Select(z => $"{z:X2}"))}"); diff --git a/Tests/PKHeX.Core.Tests/Util/ConvertUtilTests.cs b/Tests/PKHeX.Core.Tests/Util/ConvertUtilTests.cs index 8a235aa95..f1a935054 100644 --- a/Tests/PKHeX.Core.Tests/Util/ConvertUtilTests.cs +++ b/Tests/PKHeX.Core.Tests/Util/ConvertUtilTests.cs @@ -1,4 +1,5 @@ -using FluentAssertions; +using System; +using FluentAssertions; using Xunit; namespace PKHeX.Tests.Util @@ -34,5 +35,14 @@ namespace PKHeX.Tests.Util var convert = Core.Util.GetHexValue(v); convert.Should().Be(result); } + + [Theory] + [InlineData("01020304", 0x1020304)] + public void CheckConvertHexString(string v, uint result) + { + var convert = Core.Util.GetBytesFromHexString(v); + var u32 = BitConverter.ToUInt32(convert); + u32.Should().Be(result); + } } }