В.NET (включая C#), Вы имеете BitConverter
, который принимает много типов, предоставляя доступ к необработанному двоичному файлу; получить шестнадцатеричное число, ToString("x2")
- наиболее распространенная опция (возможно, обернутый в служебный метод):
byte[] raw = BitConverter.GetBytes(123.45);
StringBuilder sb = new StringBuilder(raw.Length * 2);
foreach (byte b in raw)
{
sb.Append(b.ToString("x2"));
}
Console.WriteLine(sb);
Странно, базируйтесь 64, имеет преобразование с 1 строкой (Convert.ToBase64String
), но основа 16 прилагает больше усилий. Если Вы не ссылаетесь на Microsoft. VisualBasic, в этом случае:
long tmp = BitConverter.DoubleToInt64Bits(123.45);
string hex = Microsoft.VisualBasic.Conversion.Hex(tmp);
CopyOnWriteArrayList.subList выбрасывает ConcurrentModificationExceptions, если содержащий список изменяется из под ним:
public class ListTest {
private static List<int[]> intList;
public static void main (String[] args) {
CopyOnWriteArrayList<Integer> cowal = new CopyOnWriteArrayList<Integer>();
cowal.add(1);
cowal.add(2);
cowal.add(3);
List<Integer> sub = cowal.subList(1, 2);
cowal.add(4);
sub.get(0); //throws ConcurrentModificationException
}
}
У Sbodd есть правильный ответ, но похоже, что использование CopyOnWriteArrayList вместо ArrayList - это всего лишь попытка замаскировать ошибку. Настоящая проблема - это попытка изменить базовый список во время итерации по нему. Вам нужно найти в коде, где вы обращаетесь к нему как таковому, и удалить такое использование или обойти его.