diff --git a/src/Interpreting/ConverterFunctions.cs b/src/Interpreting/ConverterFunctions.cs index 6522a78..fa2a618 100644 --- a/src/Interpreting/ConverterFunctions.cs +++ b/src/Interpreting/ConverterFunctions.cs @@ -10,6 +10,9 @@ namespace FileDBReader public static class ConverterFunctions { #region FunctionDictionaries + /// + /// Conversion Rules: Hex String to their Number Representation. + /// public static Dictionary> ConversionRulesImport = new Dictionary> { { typeof(bool), (s, Encoding) => PrimitiveTypeConverter.GetObject(HexHelper.ToBytes(s)).ToString()}, @@ -26,6 +29,9 @@ public static class ConverterFunctions { typeof(String), (s, Encoding) => ToString(s, Encoding)} }; + /// + /// Conversion Rules: Number Strings to their Hex Representation. + /// public static Dictionary> ConversionRulesExport = new Dictionary> { { typeof(bool), (s, Encoding) => PrimitiveTypeConverter.GetBytes(bool.Parse(s))}, @@ -37,8 +43,16 @@ public static class ConverterFunctions { typeof(uint), (s, Encoding) => PrimitiveTypeConverter.GetBytes(uint.Parse(s))}, { typeof(long), (s, Encoding) => PrimitiveTypeConverter.GetBytes(long.Parse(s))}, { typeof(ulong), (s, Encoding) => PrimitiveTypeConverter.GetBytes(ulong.Parse(s))}, - { typeof(float), (s, Encoding) => PrimitiveTypeConverter.GetBytes(float.Parse(s, CultureInfo.InvariantCulture))}, - { typeof(double), (s, Encoding) => PrimitiveTypeConverter.GetBytes(double.Parse(s))}, + { typeof(float), (s, Encoding) => + { + var normalized = s.Replace(",", "."); + return PrimitiveTypeConverter.GetBytes(float.Parse(s, CultureInfo.InvariantCulture)); + }}, + { typeof(double), (s, Encoding) => + { + var normalized = s.Replace(",", "."); + return PrimitiveTypeConverter.GetBytes(double.Parse(s, CultureInfo.InvariantCulture)); + }}, { typeof(String), (s, Encoding) => Encoding.GetBytes(s)} }; diff --git a/unittests/FileDBReader-Tests/FileDBReader/ConverterFunctionsTest.cs b/unittests/FileDBReader-Tests/FileDBReader/ConverterFunctionsTest.cs index 9f4f51f..879c5b5 100644 --- a/unittests/FileDBReader-Tests/FileDBReader/ConverterFunctionsTest.cs +++ b/unittests/FileDBReader-Tests/FileDBReader/ConverterFunctionsTest.cs @@ -89,6 +89,22 @@ public void TypeConversion_Test_String() Assert.IsTrue(StringConversion_Test_Generic(new UTF32Encoding())); } + [TestMethod] + public void InvariantFloatTests() + { + String float1 = "1.5"; + var expected = BitConverter.GetBytes(1.5f); + var parsed = ConverterFunctions.ConversionRulesExport[typeof(float)](float1, Encoding.Unicode); + + String float2 = "1,5"; + var parsed2 = ConverterFunctions.ConversionRulesExport[typeof(float)](float1, Encoding.Unicode); + for (int i = 0; i < 4; i++) + { + Assert.AreEqual(parsed2[i], expected[i]); + Assert.AreEqual(parsed[i], expected[i]); + } + } + #region HelpfulFunctions public bool StringConversion_Test_Generic(Encoding e) {