Преобразуйте от BitArray до байта

Это не имеет смысла. Вы берете жестко закодированную строку «10:30», конвертируете ее в дату и время, а затем конвертируете обратно в строку. Поэтому, конечно, он всегда говорит «10.30».

Если вы хотите узнать текущее время, получите его напрямую:

d = datetime.datetime.now()
print(d.strftime("%I:%M"))
31
задан Igor Kustov 10 January 2017 в 23:38
поделиться

3 ответа

Это должно работать:

byte ConvertToByte(BitArray bits)
{
    if (bits.Count != 8)
    {
        throw new ArgumentException("bits");
    }
    byte[] bytes = new byte[1];
    bits.CopyTo(bytes, 0);
    return bytes[0];
}
49
ответ дан 27 November 2019 в 21:34
поделиться

Решение бедного человека:

protected byte ConvertToByte(BitArray bits)
{
    if (bits.Count != 8)
    {
        throw new ArgumentException("illegal number of bits");
    }

    byte b = 0;
    if (bits.Get(7)) b++;
    if (bits.Get(6)) b += 2;
    if (bits.Get(5)) b += 4;
    if (bits.Get(4)) b += 8;
    if (bits.Get(3)) b += 16;
    if (bits.Get(2)) b += 32;
    if (bits.Get(1)) b += 64;
    if (bits.Get(0)) b += 128;
    return b;
}
5
ответ дан 27 November 2019 в 21:34
поделиться

Это должно добиться цели. Однако предыдущий ответ довольно вероятен более оптимальный вариант.

    public byte ConvertToByte(BitArray bits)
    {
        if (bits.Count > 8)
            throw new ArgumentException("ConvertToByte can only work with a BitArray containing a maximum of 8 values");

        byte result = 0;

        for (byte i = 0; i < bits.Count; i++)
        {
            if (bits[i])
                result |= (byte)(1 << i);
        }

        return result;
    }

В примере Вы отправили получающийся байт, будет 0x80. Другими словами, первое значение в BitArray coresponds к первому биту в возвращенном байте.

4
ответ дан 27 November 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: