uint is more correct

This commit is contained in:
Matt Nadareski
2026-03-14 20:51:22 -04:00
parent 4add8f3e64
commit 8b7112d12f
4 changed files with 15 additions and 16 deletions

View File

@@ -1,3 +1,4 @@
using System;
using SabreTools.IO.Extensions;
namespace SabreTools.Data.Extensions
@@ -5,13 +6,12 @@ namespace SabreTools.Data.Extensions
public static class XboxExecutable
{
/// <summary>
/// Convert a 4-byte value to a formatted XBE title ID
/// Convert a UInt32 to a formatted XBE title ID
/// </summary>
public static string? ToFormattedXBETitleID(this byte[]? data)
public static string? ToFormattedXBETitleID(this uint value)
{
// Ignore invalid data
if (data is null || data.Length < 4)
return null;
// Convert to a byte array
byte[] data = BitConverter.GetBytes(value);
// Create the prefix
string prefix1 = (0x41 <= data[3] && data[3] <= 0x5A) || (0x30 <= data[3] && data[3] <= 0x39)

View File

@@ -21,8 +21,7 @@ namespace SabreTools.Data.Models.XboxExecutable
/// Title ID for this application. This field doesn't appear to matter with
/// unsigned code, so it can be set to zero.
/// </summary>
/// <remarks>4 bytes</remarks>
public byte[] TitleID { get; set; } = new byte[4];
public uint TitleID { get; set; }
/// <summary>
/// Title name for this application (i.e. L"The Simpsons Road Rage").
@@ -35,7 +34,7 @@ namespace SabreTools.Data.Models.XboxExecutable
/// to matter with unsigned code (or signed code, for that matter), so they can all
/// be set to zero.
/// </summary>
public byte[][] AlternativeTitleIDs { get; set; } = new byte[16][];
public uint[] AlternativeTitleIDs { get; set; } = new uint[16];
/// <summary>
/// Allowed media types for this .XBE.

View File

@@ -153,13 +153,13 @@ namespace SabreTools.Serialization.Readers
obj.SizeOfCertificate = data.ReadUInt32LittleEndian();
obj.TimeDate = data.ReadUInt32LittleEndian();
obj.TitleID = data.ReadBytes(4);
obj.TitleID = data.ReadUInt32LittleEndian();
obj.TitleName = data.ReadBytes(0x50);
obj.AlternativeTitleIDs = new byte[16][];
obj.AlternativeTitleIDs = new uint[16];
for (int i = 0; i < obj.AlternativeTitleIDs.Length; i++)
{
obj.AlternativeTitleIDs[i] = data.ReadBytes(4);
obj.AlternativeTitleIDs[i] = data.ReadUInt32LittleEndian();
}
obj.AllowedMediaTypes = (AllowedMediaTypes)data.ReadUInt32LittleEndian();

View File

@@ -18,7 +18,7 @@ namespace SabreTools.Serialization.Wrappers
#region Extension Properties
/// <inheritdoc cref="Certificate.AlternativeTitleIDs"/>
public byte[][]? AlternativeTitleIDsBytes => Certificate?.AlternativeTitleIDs;
public uint[]? AlternativeTitleIDs => Certificate?.AlternativeTitleIDs;
/// <inheritdoc cref="Certificate.AlternativeTitleIDs"/>
public string[]? AlternativeTitleIDsStrings
@@ -26,10 +26,10 @@ namespace SabreTools.Serialization.Wrappers
get
{
// Ignore invalid alternative title IDs
if (AlternativeTitleIDsBytes is null)
if (AlternativeTitleIDs is null)
return null;
return Array.ConvertAll(AlternativeTitleIDsBytes, ba => ba.ToFormattedXBETitleID() ?? "[NULL]");
return Array.ConvertAll(AlternativeTitleIDs, ba => ba.ToFormattedXBETitleID() ?? "[NULL]");
}
}
@@ -71,10 +71,10 @@ namespace SabreTools.Serialization.Wrappers
public ThreadLocalStorage? ThreadLocalStorage => Model.ThreadLocalStorage;
/// <inheritdoc cref="Certificate.TitleID"/>
public byte[]? TitleIDBytes => Certificate?.TitleID;
public uint TitleID => Certificate?.TitleID ?? 0;
/// <inheritdoc cref="Certificate.TitleID"/>
public string? TitleIDString => TitleIDBytes.ToFormattedXBETitleID();
public string? TitleIDString => TitleID.ToFormattedXBETitleID();
/// <inheritdoc cref="Certificate.TitleName"/>
public string? TitleName