Мы переписываем некоторые приложения, ранее разработанные в Visual FoxPro, и переделываем их с использованием .Net (используя C#).
Вот наш сценарий: Наше приложение использует смарт-карты. Мы считываем данные со смарт-карты, у которой есть имя и номер. Имя возвращается в читаемом тексте, но число, в данном случае «900», возвращается в виде 2-байтового представления символов (131 и 132) и выглядит так: ƒ„
Эти 2 специальных символа можно увидеть в расширенной таблице Ascii. Теперь, как вы можете видеть, 2 байта равны 131 и 132 и могут различаться, поскольку не существует единой стандартной расширенной таблицы ascii (насколько я могу судить, читая некоторые сообщения Здесь )
Итак... смарт-карта была ранее записана с использованием функции BINTOC в VFP, и поэтому 900 было записано на карту как ƒ„. И в FoxPro эти 2 специальных символа могут быть преобразованы обратно в целочисленный формат с помощью функции CTOBIN.. еще одна встроенная функция в FoxPro..
Итак (наконец-то добравшись до сути). До сих пор нам не удалось преобразовать эти 2 специальных символа обратно в int (900), и нам интересно, возможно ли это в .NET для чтения символьного представления целого числа обратно в фактическое целое число.
Или есть способ переписать логику этих двух функций VFP на С#?
ОБНОВЛЕНИЕ: После некоторой возни мы поняли, что для преобразования 900 в 2 байта нам нужно преобразовать 900 в 16-битное двоичное значение, а затем нам нужно преобразовать это 16-битное двоичное значение в десятичное значение.
Итак, как и выше, мы получаем обратно 131 и 132 и их соответствующие двоичные значения как 10000011 (десятичное значение 131) и 10000100 (десятичное значение 132). Когда мы объединяем эти 2 значения в «1000001110000100», это дает десятичное значение 33668, однако, если мы удаляем ведущую 1 и преобразуем «000001110000100» в десятичное, это дает правильное значение 900...
Хотя не совсем понятно, почему это...
Любая помощь будет оценена по достоинству.