using System;
using System.Text;
using System.Collections.Generic;
public class Program
{
public static string Convert2ClockAndData(string text)
{
if (!decimal.TryParse(text, out decimal d))
{
return null;
}
int[] dBits = decimal.GetBits(d);
// Convert each part to hex and apply necessary padding
string part3 = dBits[3].ToString("X2"); // Sign and scale factor (ensure 2 characters)
string part2 = dBits[2].ToString("X2"); // Most significant 32 bits (ensure 2 characters)
string part1 = dBits[1].ToString("X8"); // Middle 32 bits (ensure 8 characters)
string part0 = dBits[0].ToString("X8"); // Least significant 32 bits (ensure 8 characters)
// Concatenate the hex parts
string hexData = part3 + part2 + part1 + part0;
// Ensure even-length hex string
if (hexData.Length % 2 != 0)
{
hexData = hexData.StartsWith("0") ? hexData[1..] : "0" + hexData;
}
// Reverse byte order (two characters at a time)
string reversedHex = "";
for (int i = 0; i < hexData.Length; i += 2)
{
reversedHex = hexData.Substring(i, 2) + reversedHex;
}
return reversedHex;
}
public static string ConvertFromClockAndData(string clockAndData)
{
string hexData = "";
for (int i = 0; i < clockAndData.Length; i += 2)
{
hexData = clockAndData.Substring(i, 2) + hexData;
}
string part0 = hexData[^8..];
string part1 = hexData[^16..^8];
string part2 = hexData[^18..^16];
string part3 = hexData[..^18];
if (string.IsNullOrEmpty(part3)) {
part3 = "00";
}
int[] dBits = new int[4];
dBits[0] = int.Parse(part0, System.Globalization.NumberStyles.HexNumber);
dBits[1] = int.Parse(part1, System.Globalization.NumberStyles.HexNumber);
dBits[2] = int.Parse(part2, System.Globalization.NumberStyles.HexNumber);
dBits[3] = int.Parse(part3, System.Globalization.NumberStyles.HexNumber);
decimal d = new decimal(dBits);
return d.ToString();
}
public static void Main() {
}
}