partha143 Ответов: 1

Как преобразовать float в byte[] с помощью реальной логики.


Привет,
Мне нужно преобразовать число с плавающей запятой в байт[] помимо использования встроенного метода
BitConverter.GetBytes
Я хочу добиться этого, используя некоторую логику.

Спасибо.

Что я уже пробовал:

Я погуглил, но не смог найти ничего, кроме встроенного метода
BitConverter.GetBytes

.

[no name]

Попробуй https://msdn.microsoft.com/en-us/library/system.buffer.blockcopy.aspx и вам нужно серьезно улучшить свои навыки google.

Suvendu Shekhar Giri

Да, это должно сделать работу.
но ОП хочет построить логику сам. не знаю почему !
"...кроме использования встроенного метода"

[no name]

Потому что так было сказано в его домашнем задании.

Suvendu Shekhar Giri

Итак, в чем же проблема использования встроенных функций?
есть ли для этого особые требования?

partha143

Suvendu, я хочу преобразовать float в байт на языке описания устройства, который является очень простым языком и не требует для этого никакого встроенного метода. Итак, мой подход состоял в том, чтобы сначала построить эту логику на C#, а затем попытаться преобразовать ее в язык описания устройств.

1 Ответов

Рейтинг:
2

OriginalGriff

Это сложно в C#, потому что приведение двойников к "дружественным байтам" значениям в C# невозможно в "нормальном" коде.
Однако если вы посмотрите на справочные источники, то увидите, как они это делают - и это довольно просто:

[System.Security.SecuritySafeCritical]  // auto-generated
public unsafe static byte[] GetBytes(double value)
{
    Contract.Ensures(Contract.Result<byte[]>() != null);
    Contract.Ensures(Contract.Result<byte[]>().Length == 8);

    return GetBytes(*(long*)&value);
}

[System.Security.SecuritySafeCritical]  // auto-generated
public unsafe static byte[] GetBytes(long value)
{
    Contract.Ensures(Contract.Result<byte[]>() != null);
    Contract.Ensures(Contract.Result<byte[]>().Length == 8);

    byte[] bytes = new byte[8];
    fixed(byte* b = bytes)
        *((long*)b) = value;
    return bytes;
}
Это самый эффективный способ сделать это (игнорировать биты контракта)
Но unsafe код может быть не тем, что требуется для вашей домашней работы...


partha143

Я хочу, чтобы эта логика была реализована на языке описания устройства, который не требует реализации указателей. Разве мы не можем реализовать его, избегая указателей?