2026-03-14 20:51:22 -04:00
|
|
|
using System;
|
2026-03-13 21:01:38 -04:00
|
|
|
using SabreTools.IO.Extensions;
|
|
|
|
|
|
|
|
|
|
namespace SabreTools.Data.Extensions
|
|
|
|
|
{
|
2026-03-18 17:15:03 -04:00
|
|
|
public static class XboxExecutableExtensions
|
2026-03-13 21:01:38 -04:00
|
|
|
{
|
|
|
|
|
/// <summary>
|
2026-03-14 20:51:22 -04:00
|
|
|
/// Convert a UInt32 to a formatted XBE title ID
|
2026-03-13 21:01:38 -04:00
|
|
|
/// </summary>
|
2026-03-21 20:09:10 -04:00
|
|
|
public static string ToFormattedXBETitleID(this uint value)
|
2026-03-13 21:01:38 -04:00
|
|
|
{
|
2026-03-14 20:51:22 -04:00
|
|
|
// Convert to a byte array
|
|
|
|
|
byte[] data = BitConverter.GetBytes(value);
|
2026-03-13 21:01:38 -04:00
|
|
|
|
|
|
|
|
// Create the prefix
|
|
|
|
|
string prefix1 = (0x41 <= data[3] && data[3] <= 0x5A) || (0x30 <= data[3] && data[3] <= 0x39)
|
|
|
|
|
? $"{(char)data[3]}"
|
|
|
|
|
: $"{data[3]:X2}";
|
|
|
|
|
string prefix2 = (0x41 <= data[2] && data[2] <= 0x5A) || (0x30 <= data[2] && data[2] <= 0x39)
|
|
|
|
|
? $"{(char)data[2]}"
|
|
|
|
|
: $"{data[2]:X2}";
|
|
|
|
|
|
|
|
|
|
// Create the serial
|
|
|
|
|
int offset = 0;
|
|
|
|
|
ushort serial = data.ReadUInt16LittleEndian(ref offset);
|
|
|
|
|
|
|
|
|
|
// Assemble and return
|
|
|
|
|
return $"{prefix1}{prefix2}-{serial:D3}";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|