Sprache: C#
Setzt ein angegebenes Bit in einem übergebenen Byte. Als Parameter werden ein Byte (0x5A) und eine Bitnummer (0-7) übergeben. Returnwert ist ein Byte mit dem neuen Wert. Die Fehlerbehandlung ist nur auf das Notwendigste beschränkt.
/// <summary>
/// Setzt ein bestimmtes Bit in einem Byte.
/// </summary>
/// <param name="b">Byte, welches bearbeitet werden soll.</param>
/// <param name="BitNumber">Das zu setzende Bit (0 bis 7).</param>
/// <returns>Ergebnis - Byte</returns>
public static byte SetBit(byte b, int BitNumber)
{
//Kleine Fehlerbehandlung
if (BitNumber < 8 && BitNumber > -1)
{
return (byte)(b | (byte)(0x01 << BitNumber));
}
else
{
throw new InvalidOperationException(
"Der Wert für BitNumber " + BitNumber.ToString() + " war nicht im zulässigen Bereich! (BitNumber = (min)0 - (max)7)");
}
}
/// <summary>
/// Setzt ein bestimmtes Bit in einem Byte.
/// </summary>
/// <param name="b">Byte, welches bearbeitet werden soll.</param>
/// <param name="BitNumber">Das zu setzende Bit (0 bis 7).</param>
/// <returns>Ergebnis - Byte</returns>
public static byte SetBit(byte b, int BitNumber)
{
//Kleine Fehlerbehandlung
if (BitNumber < 8 && BitNumber > -1)
{
return (byte)(b | (byte)(0x01 << BitNumber));
}
else
{
throw new InvalidOperationException(
"Der Wert für BitNumber " + BitNumber.ToString() + " war nicht im zulässigen Bereich! (BitNumber = (min)0 - (max)7)");
}
}
Alte URL:
/snippet/setzt-ein-bestimmtes-bit-in-einem-byte/1542
Ein kleiner Erweiterungsvorschlag (basierend auf dem .NET Delphi-Dialekt Oxygene von Remobjects):
class method sup.SetzeBit(b: Byte; BitNumber: Integer; Zielzustand:Boolean): Byte;
begin
// Kleine Fehlerbehandlung
if (BitNumber < 8) and (BitNumber > -1) then
begin
if Zielzustand then
exit Byte(b or Byte(1 shl BitNumber))
else
exit Byte(b and not Byte(1 shl BitNumber))
end
else begin
raise new InvalidOperationException(‚Der Wert für BitNumber ‚ + BitNumber.ToString() + ‚ war nicht im zulässigen Bereich! (BitNumber = (min)0 – (max)7)‘);
end;
end;
Dies würde ermöglichen, Bits sowohl ein- als auch auszuschalten.