<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=464361&amp;view=findpost&amp;p=3926102</guid>
        <pubDate>Mon, 28 Jul 2025 19:18:06 +0000</pubDate>
        <title>Проблема с GetHashCode()</title>
        <link>https://forum.sources.ru/index.php?showtopic=464361&amp;view=findpost&amp;p=3926102</link>
        <description><![CDATA[Виталь: Доброго времени суток&#33;<br>
У меня задача воспроизвести часть кода стороннего приложения. Оно написано на VB под .NET 4.8.<br>
Был взят dotPeek и получен исходник данного приложения на C# в виде непригодном для компиляции, но достаточно читабельном. После чего был создан отдельный проект куда я собствено и добавлял постепенно восстановленный код. Функция за функцией.<br>
<br>
Образовалась проблема черного ящика. Я знаю что на входе и что на выходе оригинальной программы, но по какой-то причине воспроизведенный код дает иной результат.<br>
<br>
О коде.<br>
Функция public string HF() выдает на выходе строку вида 00000-00000, состоящую исключительно из цифр.<br>
Рабочая там по сути одна строка<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">string sourceValue = Math.Abs(this.GHDSN().GetHashCode()).ToString();</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
которая получает серийник устройства в функции GHDSN(), получает от этой строки GetHashCode(), методом нехитрых манипуляций дополняет строку ведущими нулями до длины 10 знаков (хотя в большинстве случаев там и так 10 знаков) и вставляет минус в нужном месте. Все предельно просто.<br>
<br>
Функция GHDSN() получает серийник жесткого диска через<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>SELECT * FROM Win32_DiskDrive WHERE Index=0</div></div><br>
все тривиально. В случае exception выдается &quot;значение по умолчанию&quot;.<br>
<br>
Но вот 2 программы - 2 разных результата выводятся на экран.<br>
<br>
Вот пример исходных данных.<br>
Строка на входе (возвращаемая GHDSN) &quot;OK&quot; (без кавычек). Исходная программа выдает 20413-62128, мой римейк - 08378-30687.<br>
Строка на входе 5143428997 (то самое значение по умолчанию) - исходная программа выдает 10806-48952, мой римейк - 05193-62597.<br>
На реальном серийнике диска все то же самое, за исключением того что мой римейк выдает ответ без ведущего нуля, там единица.<br>
<br>
Разница была в компиляторах и версии .NET, но для чистоты эксперимента я воспроизвел это в VS2019 и .NET 4.8 - ничего не изменилось, строка выводится не та. У кого будут какие идеи?]]></description>
        <author>Виталь</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	