• Как записать число в файл в двоичном режиме?

    @GrigorySvetov
    1. Если про бинарный вывод (т.е. когда сам символ смысловой нагрузки не несет, а несет номер символа в кодировке) ("настоящий" бинарный вывод).

    Основной прикол в том, что массив в Си можно понимать как просто указатель на фиксированный по размеру набор значений, а саму переменную массива - как указатель на этот набор.
    И действительно, так привычное нам обращение по индексу arr[i] в Си переводится в *(arr+i) (разыменование по указателю со смещением).
    Поэтому когда мы пишем fwrite(arr, ...), на самом деле мы пишем туда УКАЗАТЕЛЬ. В остальном Си достаточно всё равно, что происходит (главное чтобы без выходов на чужую память, иначе тут уже система убьет процесс). Т.е. мы передаем указатель на ЧИСЛО (одно число) как будто это целый массив, дальше всё честно для него пишем. Код получается вот такой:
    #include <stdio.h>
    int main(){
    	FILE *fp;       //переменная файлового потока
    	int value=11;   //наша переменная с числом
    	fp=fopen("output.txt","wb");//открываем файл на перезапись ('w') в бинарном режиме ('b' в "wb")
    	if (fp==NULL){            	     //если файл не был открыт, то...
    		perror("file hadn't opened");//вывести в поток ошибок сообщение (обычно это то же, что поток вывода (т.е. экран компьюетра)
    
    	} else {                            //иначе..
    		fwrite(&value,sizeof(int),1,fp); //вывести значение как массив с единственной ячейкой
    	}
    	fclose(fp);//закрыть в любом случае (если fp==NULL, ошибкой всё равно не будет, а читается удобнее, чем все эти ветки if'ов
    	return 0;
    }


    2. Если про то, что в комментарии, т.е. с ноликами и единичками в файле... Это "ненастоящий" бинарный режим, т.к. каждый символ '0' и '1' - это правда честные отдельные символы, которые надо читать как текст. В этом случае, я думаю, Вы просто это число побитно обрабатываете и fputc()'ом загоняете (но fopen() будет уже таким: fopen("<имя файла в форме строки>", "w"); (а не fopen("<имя файла в форме строки", "wb");)
    Ответ написан
    1 комментарий
  • Как на чате выделить сообщение админа?

    @GrigorySvetov
    Хочу заметить такой момент, что средствами CSS тут точно не поможешь. CSS - очень умный язык стилей, но не более того. Поэтому если смотреть, то лучше всего просто поискать, как бы Вы могли определить автора сообщения наиболее грамотно (т.е. откуда взять id).
    Вы и сами себе поможете, решив именно эту проблему.

    Думаю, что как всякая порядочная компания предоставит для таких целей не текст (в JS'е точно), а объект (например, JSON-объект). Там и найдется свойство "creatorId", условно говоря.

    Но нет, CSS работает исключительно с HTML. Если по структуре HTML (или пользовательскому поведению (пример - наведение курсора на ссылку: ссылка меняется)) нельзя чего-то определить, то CSS этого просто правда "не знает". Следовательно, чтобы админские сообщения чем-то отличались от сообщений, написанных другим creatorId, ... нужно как-то вывести это в саму структуру HTML'я (например, особым классом сообщений).

    И ещё... Не очень ясно, хотелось бы уточнить... Где этот скрипт выполняется и куда отсылаются результаты. Потому что если Вы в html-странице пишете просто <script src="имя скрипта.js"></script>, то на самом деле у каждого пользователя выполняется этот скрипт. Более того, не исключаю и такой возможности (если скрипт не внешний, то точно работает, а так не гарантирую), что можно ниже этого <script> написать ещё свой скрипт, в котором все сообщения (объектам newMessage), "спрашивают", кто из них имеет id отправителя ==1. Найденные помечаются особым классом и так выводятся. А CSS просто обрабатывает их класс.
    Ответ написан