Skip to content

Commit

Permalink
Merge pull request #435 from ismdiego/develop
Browse files Browse the repository at this point in the history
Allow changing the default Encoding used in S7String
  • Loading branch information
mycroes authored Jun 17, 2022
2 parents b475aee + ec554dd commit 7f76d4f
Showing 1 changed file with 15 additions and 4 deletions.
19 changes: 15 additions & 4 deletions S7.Net/Types/S7String.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,19 @@ namespace S7.Net.Types
/// An S7 String has a preceeding 2 byte header containing its capacity and length
/// </summary>
public static class S7String
{
{
private static Encoding stringEncoding = Encoding.ASCII;

/// <summary>
/// The Encoding used when serializing and deserializing S7String (Encoding.ASCII by default)
/// </summary>
/// <exception cref="ArgumentNullException">StringEncoding must not be null</exception>
public static Encoding StringEncoding
{
get => stringEncoding;
set => stringEncoding = value ?? throw new ArgumentNullException(nameof(StringEncoding));
}

/// <summary>
/// Converts S7 bytes to a string
/// </summary>
Expand All @@ -30,15 +42,14 @@ public static string FromByteArray(byte[] bytes)

try
{
return Encoding.ASCII.GetString(bytes, 2, length);
return StringEncoding.GetString(bytes, 2, length);
}
catch (Exception e)
{
throw new PlcException(ErrorCode.ReadData,
$"Failed to parse {VarType.S7String} from data. Following fields were read: size: '{size}', actual length: '{length}', total number of bytes (including header): '{bytes.Length}'.",
e);
}

}

/// <summary>
Expand All @@ -56,7 +67,7 @@ public static byte[] ToByteArray(string value, int reservedLength)

if (reservedLength > 254) throw new ArgumentException($"The maximum string length supported is 254.");

var bytes = Encoding.ASCII.GetBytes(value);
var bytes = StringEncoding.GetBytes(value);
if (bytes.Length > reservedLength) throw new ArgumentException($"The provided string length ({bytes.Length} is larger than the specified reserved length ({reservedLength}).");

var buffer = new byte[2 + reservedLength];
Expand Down

0 comments on commit 7f76d4f

Please sign in to comment.