Доступ к битовому полю реализуется с точки зрения операций над базовым типом. В примере unsigned int
. Поэтому, если у вас есть что-то вроде:
struct x {unsigned int a: 4; unsigned int b: 8; unsigned int c: 4; };
Когда вы получаете доступ к полю b
, компилятор обращается к целому unsigned int
, а затем сдвигает и маскирует соответствующий диапазон бит. (Ну, это не для , но мы можем притворяться, что он это делает.)
В случае с большим энтином макет будет примерно таким (самый старший бит вначале):
AAAABBBB BBBBCCCC
На маленьком конце, макет будет выглядеть следующим образом:
BBBBAAAA CCCCBBBB
[ ! d16] Если вы хотите получить доступ к макету с большим энтиансом из маленького числа endian или наоборот, вам нужно будет сделать дополнительную работу. Это увеличение переносимости имеет ограничение производительности, и поскольку структура структуры уже не переносима, языковые разработчики пошли с более быстрой версией.
Это делает много предположений. Также обратите внимание, что sizeof (struct x) == 4
на большинстве платформ.
В Windows:
.docx
для этого примера) Open with...
python
Always use the selected program to open this kind of file
. Примечание: будет выполняться содержимое файла .docx
в контексте оболочки python. Он сразу же закроется после завершения оценки содержимого файла. Если вы хотите отредактировать файл в текстовом редакторе, возможно, вы должны скачать notepad ++ и выбрать это приложение по умолчанию.
Например, вот универсальное решение, которое я написал для: 1) открытия ссылки рабочего стола Windows (* .URL), которая была скопирована в ящик Linux. Или 2) открытие ссылки Linux .Desktop, которая была скопирована в окно Windows.
Вот сценарий Python, который обрабатывает оба случая:
# UseDesktopLink.py
import sys
import webbrowser
script, filename = sys.argv
file_object = open(filename,'r')
for line in file_object:
if line[0:4]=="URL=":
url=line[4:]
webbrowser.open_new(url)
file_object.close()
В Windows используйте метод Скотта Х (через файл bat) для обработки связи.
В Linux щелкните правой кнопкой мыши файл URL-адресов Windows. Выберите «Свойства» и «Открыть с». Нажмите «Добавить», чтобы добавить новое приложение. Затем в нижней части окна «Добавить приложение» нажмите «Использовать пользовательскую команду». Затем перейдите в файл UseDesktopLink.py и нажмите «Открыть». Но прежде чем вы нажмете «Добавить», в текстовом поле «Использовать пользовательскую команду» поставьте «python» перед именем файла (без кавычек). Затем нажмите «Добавить» и «Закрыть».
Надеюсь, что это поможет.
foo
Get Info
или щелкните значок файла, затем нажмите Получить информацию или нажмите файл и нажмите Ctrl + I Open With
выберите путь к бинарнику python change All
continue
*.py
вам необходимо выполнить вышеуказанные шаги с помощью .py
вместо foo
на шаге 1
– Lelouch Lamperouge
2 January 2012 в 16:11
Я нашел этот старый вопрос, ища ответ сам, и я решил поделиться своим решением. Я использовал простую программу c, чтобы направить аргументы на скрипт python, позволяя скрипту python оставаться скриптом вместо необходимости компилировать его, чтобы заставить все работать. Вот моя программа c:
int main(int argc, char *argv[]){
char cmd[0xFF];
// For me, argv[1] is the location of the file that is being opened. I'm not sure if this is different on other OSes
snprintf(cmd,sizeof cmd,"python YOUR_PYTHON_SCRIPT_HERE.py -a %s", argv[1]);
system(cmd);
return 0;
}
Затем я скомпилировал программу c и установил ее как приложение по умолчанию для расширения файла. Затем в скрипте python YOUR_PYTHON_SCRIPT_HERE.py, я получаю такой аргумент:
import sys
assert len(sys.argv) > 2 # Breaks if you call the script without the arguments
theFile = " ".join(sys.argv[2:]) # What the c program gives us
print(theFile) # Print it out to prove that it works
theFile будет содержать местоположение файла, который открывается. Получите содержимое файла, используя:
with open(theFile,"r") as f:
fileContents = f.read()
В Mac OS X вы можете использовать Automator для создания приложения, которое вызывает ваше приложение python и передает путь входного файла в виде строкового аргумента. В мастере рабочего процесса приложения добавьте действие «Запустить сценарий оболочки», выберите Pass input:
как as arguments
, а в текстовом поле добавить:
python /path/to/my/app/myapp.py "$@"
"$@"
проходит по всем аргументам в вход (как выбранный файл) в виде строк. Пока ваш скрипт настроен для работы с вводом (sys.argv
) в виде списка строк (первый из которых является путём приложения python), тогда он будет работать.
Когда вы сохраняете этот Рабочий процесс Automator обрабатывается OS X, как и любое другое приложение, и вы можете установить это приложение как значение по умолчанию для файлов типа «* .foo». Чтобы связать «* .foo» с этим приложением, щелкните правой кнопкой мыши файл .foo, Get Info
, Open with: Other...
, выберите приложение, которое вы создали в Automator, затем нажмите кнопку Change All...
.
Подобный, но, надеюсь, менее привлекательный подход может работать в Windows. Вероятно, вы можете создать командный файл (.bat
) со следующим:
python C:\path\to\my\app\myapp.py %*
%*
расширяется ко всем аргументам.
Пока вы можете связать файл расширение с этим пакетным файлом, тогда вы можете это сделать, и это ваше решение. Однако я не пробовал это решение для Windows, поэтому возьмите его с солью. Решение Mac, с другой стороны, я проверил.