Язык C оставляет компилятору некоторую свободу в отношении расположения структурных элементов в памяти:
Язык C предоставляет некоторую уверенность программисту в компоновке элементов в структуре:
Проблемы, связанные с выравниванием элементов:
Как работает выравнивание:
ps. Более подробную информацию можно найти здесь: «Сэмюэл П. Харбисон, Гай Л. Стейле CA Reference, (5.6.2 - 5.6.7) "
Если Вы подразумеваете, что C# кодируют, чтобы сделать это:
закончитесь = 25 + (36 / 60) + (55.57 / 3600)
Сначала необходимо будет проанализировать выражение с Regex или некоторым другим механизмом и разделить его на отдельные части. Затем:
String hour = "25";
String minute = "36";
String second = "55.57";
Double result = (hour) + (minute) / 60 + (second) / 3600;
И конечно переключатель для зеркального отражения знака в зависимости от N/S или E/S. Википедия имеет немного на этом:
Для вычислений Западный/Восточный суффикс заменяется знаком минус в западном полушарии. Смутно, конвенция отрицания для Востока также иногда замечается. Предпочтительная конвенция - что Восток быть положительным - согласовывается с предназначенной для правой руки Декартовой системой координат с Северным полюсом. Определенная долгота может затем быть объединена с определенной широтой (обычно положительный в северном полушарии) для предоставления точной позиции по поверхности Земли. (http://en.wikipedia.org/wiki/Longitude)
Спасибо за все быстрые ответы. На основе ответа amdfan я поместил этот код вместе, который делает задание в C#.
/// <summary>The regular expression parser used to parse the lat/long</summary>
private static Regex Parser = new Regex("^(?<deg>[-+0-9]+)[^0-9]+(?<min>[0-9]+)[^0-9]+(?<sec>[0-9.,]+)[^0-9.,ENSW]+(?<pos>[ENSW]*)$");
/// <summary>Parses the lat lon value.</summary>
/// <param name="value">The value.</param>
/// <remarks>It must have at least 3 parts 'degrees' 'minutes' 'seconds'. If it
/// has E/W and N/S this is used to change the sign.</remarks>
/// <returns></returns>
public static double ParseLatLonValue(string value)
{
// If it starts and finishes with a quote, strip them off
if (value.StartsWith("\"") && value.EndsWith("\""))
{
value = value.Substring(1, value.Length - 2).Replace("\"\"", "\"");
}
// Now parse using the regex parser
Match match = Parser.Match(value);
if (!match.Success)
{
throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, "Lat/long value of '{0}' is not recognised", value));
}
// Convert - adjust the sign if necessary
double deg = double.Parse(match.Groups["deg"].Value);
double min = double.Parse(match.Groups["min"].Value);
double sec = double.Parse(match.Groups["sec"].Value);
double result = deg + (min / 60) + (sec / 3600);
if (match.Groups["pos"].Success)
{
char ch = match.Groups["pos"].Value[0];
result = ((ch == 'S') || (ch == 'W')) ? -result : result;
}
return result;
}
Что Вы желаете представить его как? Секунды дуги? Затем 60 минут в каждом градусе, 60 секунд в каждую минуту. Необходимо было бы затем сохранить E и N собой.
Это не то, как это обычно делается все же.
Самое легкое представление, которое я видел для работы с, является точкой, напечатанной на земном шаре на объединенной энергосистеме, которая возникает через центр земли. [Таким образом хороший радиус-вектор.] Проблема с этим состоит в том, что, в то время как это просто в использовании, данные, получая его в и из системы правильно могут быть жесткими, потому что земля не кругла, или в этом отношении универсальна.