我想学习如何使用C#从一个字节中获取两个半字节(高和低)以及如何将两个半字节组装回一个字节.
我正在使用C#和.Net 4.0,如果这有助于可以使用哪些方法以及可以使用哪些库.
Mau*_*Mau 32
您可以"屏蔽"一个字节的4位以使用半字节,然后将这些位移到字节中最右侧的位置:
byte x = 0xA7; // For example...
byte nibble1 = (byte) (x & 0x0F);
byte nibble2 = (byte)((x & 0xF0) >> 4);
// Or alternatively...
nibble2 = (byte)((x >> 4) & 0x0F);
byte original = (byte)((nibble2 << 4) | nibble1);
Run Code Online (Sandbox Code Playgroud)
这个扩展符合OP的要求,我想为什么不分享它:
/// <summary>
/// Extracts a nibble from a large number.
/// </summary>
/// <typeparam name="T">Any integer type.</typeparam>
/// <param name="t">The value to extract nibble from.</param>
/// <param name="nibblePos">The nibble to check,
/// where 0 is the least significant nibble.</param>
/// <returns>The extracted nibble.</returns>
public static byte GetNibble<T>(this T t, int nibblePos)
where T : struct, IConvertible
{
nibblePos *= 4;
var value = t.ToInt64(CultureInfo.CurrentCulture);
return (byte)((value >> nibblePos) & 0xF);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
没有一个答案是令人满意的,所以我会提交我自己的。我对这个问题的解释是:
输入:1 字节(8 位)
输出:2 字节,每个存储一个半字节,这意味着最左边的 4 位(又名高半字节)是 0000,而最右边的 4 位(低半字节)包含分隔的半字节.
byte x = 0x12; //hexadecimal notation for decimal 18 or binary 0001 0010
byte highNibble = (byte)(x >> 4 & 0xF); // = 0000 0001
byte lowNibble = (byte)(x & 0xF); // = 0000 0010
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18387 次 |
| 最近记录: |