🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
structure

このタグは、プログラム言語におけるデータ型structure(構造体)に関するタグです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2416閲覧

Python ctypes.Structureについて

succulent

総合スコア12

structure

このタグは、プログラム言語におけるデータ型structure(構造体)に関するタグです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/12 06:28

編集2020/12/12 08:39

#やりたいこと
ctypes.Structure を使ってファイル名(実行ファイル,画像)とファイルサイズを保存しようとしているのですが,以下のようなエラー出てしまいます.
よろしくお願いします.

#サンプルコード

python

1class FileSize(Structure): 2 _fields_ = [ 3 ('exe_file_name', c_char * 64 * 50), 4 ('image_name', c_char * 64 * 50), 5 ('exe_file_length', c_uint64), 6 ('image_length', c_uint64), 7 ]

python

1import sys 2 3exe_file = "sample.py" 4image_name = "sample.jpg" 5f_exe = open(exe_file, "rb") 6f_image = open(image_name, "rb") 7exe_data = f_exe.read() 8image_data = f_image.read() 9exe_size = sys.getsizeof(exe_data) 10image_size = sys.getsizeof(image_data) 11 12file_size = FileSize( 13 exe_file, 14 image_name, 15 exe_size, 16 image_size, # エラー箇所 17 )

#エラー

File "test.py", line 41, in <module> image_size, TypeError: expected c_char_Array_64_Array_50 instance, got str

#環境
MacOS Mojave 1.14.6
Python 3.7.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teamikl

2020/12/12 08:36

確認: OffloadRequest が未定義ですが、FileSize ですか?
succulent

2020/12/12 08:38

あ,そうです! 簡易化の為に一部変えていた部分を,他で変え忘れていました... ご指摘ありがとうございます.
guest

回答1

0

自己解決

('exe_file_name', c_char * 64 * 50)

から

('exe_file_name', c_char * 64)

に変更しました.(二重配列になっていたのが原因だったようです)

投稿2020/12/12 08:33

succulent

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teamikl

2020/12/12 08:46

文字列 → バイト型変更も必要ですね。 後、質問内容とは関係ない部分ですが、 sys.getsizeof(...) は期待通りの値ですか?
succulent

2020/12/12 08:55

先ほどそのエラーが出ていました... exe_fileを確認したところ, 元ファイル:317 sys:350 と若干増加しており,exeとimageのバイナリが混ざってしまっています. どうしたらいいのでしょうか?
teamikl

2020/12/12 09:28

ファイル名の文字列は decode でバイト型に変換。 ファイルサイズは os.stat でも所得出来ますが、 実際に読み込んだデータサイズにしたほうがよいので sys.getsizeof -> len でデータサイズを所得
succulent

2020/12/12 09:58

decode()・len()にしたところ無事できました! ありがとうございました!! また機会があればよろしくお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問