Объект C# двоичная сериализация

Решето Эратосфена является способом пойти, из-за он - простота и скорость. Моя реализация в процессорное время C

#include 
#include 
#include 
#include 

int main(void)
{
    unsigned int lim, i, j;

    printf("Find primes upto: ");
    scanf("%d", &lim);
    lim += 1;
    bool *primes = calloc(lim, sizeof(bool));

    unsigned int sqrtlim = sqrt(lim);
    for (i = 2; i <= sqrtlim; i++)
        if (!primes[i])
            for (j = i * i; j < lim; j += i)
                primes[j] = true;

    printf("\nListing prime numbers between 2 and %d:\n\n", lim - 1);
    for (i = 2; i < lim; i++)
        if (!primes[i])
            printf("%d\n", i);

    return 0;
}

для нахождения начал (на Pentium Двухъядерные 1,6 ГГц E2140, с помощью одноядерного)

~ 4 с для lim = 100,000,000

32
задан John Saunders 7 April 2014 в 01:38
поделиться

4 ответа

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

Ответ - почти использовать Base 64 (например, Convert.ToBase64String и Convert.FromBase64String ). Не не используйте Encoding.UTF8.GetString или что-то подобное - ваши двоичные данные не закодированные текстовые данные, и не должны рассматриваться как таковые.

Однако разве в вашей базе данных нет типа данных для двоичных данных? Проверьте типы BLOB, IMAGE и BINARY ...

53
ответ дан 27 November 2019 в 19:45
поделиться

Я использовал что-то вроде этого

MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, Person);
memoryStream.Flush();
memoryStream.Position = 0;
string value = Convert.ToBase64String(memoryStream.ToArray());
12
ответ дан 27 November 2019 в 19:45
поделиться

В основном, не сохраняют данные в виде строки в базе данных, есть blob поля, доступные для хранения двоичных данных.

Если вам действительно нужно иметь данные в виде строки, вам нужно преобразовать ваш byte [] в строку, используя кодировку base64, и получить байт [] из строки использовать декодирование.

2
ответ дан 27 November 2019 в 19:45
поделиться

Разве вы не рассматривали возможность преобразования потока памяти в строку base64hex, которая будет помещена в базу данных?

 byte[] mStream = memorystream.ToArray();
 string sConvertdHex = System.Convert.ToBase64String(mStream)

Затем вы можете выгрузить содержимое sConvertdHex в базу данных. Чтобы десериализовать его, вам нужно сделать обратное

 byte[] mData = System.Convert.FromBase64String(...)

, а затем десериализовать mData обратно в ваш объект.

0
ответ дан 27 November 2019 в 19:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: