На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Проблема с GetHashCode() , что в черном ящике?
    Доброго времени суток!
    У меня задача воспроизвести часть кода стороннего приложения. Оно написано на VB под .NET 4.8.
    Был взят dotPeek и получен исходник данного приложения на C# в виде непригодном для компиляции, но достаточно читабельном. После чего был создан отдельный проект куда я собствено и добавлял постепенно восстановленный код. Функция за функцией.

    Образовалась проблема черного ящика. Я знаю что на входе и что на выходе оригинальной программы, но по какой-то причине воспроизведенный код дает иной результат.

    О коде.
    Функция public string HF() выдает на выходе строку вида 00000-00000, состоящую исключительно из цифр.
    Рабочая там по сути одна строка
    ExpandedWrap disabled
      string sourceValue = Math.Abs(this.GHDSN().GetHashCode()).ToString();

    которая получает серийник устройства в функции GHDSN(), получает от этой строки GetHashCode(), методом нехитрых манипуляций дополняет строку ведущими нулями до длины 10 знаков (хотя в большинстве случаев там и так 10 знаков) и вставляет минус в нужном месте. Все предельно просто.

    Функция GHDSN() получает серийник жесткого диска через
    Цитата
    SELECT * FROM Win32_DiskDrive WHERE Index=0

    все тривиально. В случае exception выдается "значение по умолчанию".

    Но вот 2 программы - 2 разных результата выводятся на экран.

    Вот пример исходных данных.
    Строка на входе (возвращаемая GHDSN) "OK" (без кавычек). Исходная программа выдает 20413-62128, мой римейк - 08378-30687.
    Строка на входе 5143428997 (то самое значение по умолчанию) - исходная программа выдает 10806-48952, мой римейк - 05193-62597.
    На реальном серийнике диска все то же самое, за исключением того что мой римейк выдает ответ без ведущего нуля, там единица.

    Разница была в компиляторах и версии .NET, но для чистоты эксперимента я воспроизвел это в VS2019 и .NET 4.8 - ничего не изменилось, строка выводится не та. У кого будут какие идеи?
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0155 ]   [ 16 queries used ]   [ Generated: 3.09.25, 01:31 GMT ]