Chuyển code python sang c

Mình muốn hỏi có công cụ nào chuyển đổi code từ Python sang C++ không nhỉ ?
Mình đi từ C lên C++ không qua Python, giờ mình cần sử dụng một đoạn code từ thư viện python vào C++ không biết phải làm thế nào? Liệu có cần phải học thêm python để chuyển đổi bằng tay không ?

Bài liên quan

Chuyển code python sang c

Xin hướng làm bài toán đưa người qua sông

Có N người muốn qua sông vào trời tối, mỗi lần qua chỉ tối đa 2 người qua và cần có đèn để qua, biết khi 2 người qua thì thời gian qua = thời gian người đi chậm nhất và đoàn chỉ có 1 đèn VD: 4 3 1 4 5 => 14 5 6 8 3 12 1 => 29 10 1 7 10 3 7 3 10 6 5 3 => 55

Derfla viết 12:03 ngày 01/10/2018

Chuyển code python sang c

Cách điền giới từ, cách phát âm và trọng âm trong tiếng Anh?

Hiện tại mình đang là học sinh lớp 12,sắp tới mình muốn thi vào trường ĐH có khoa CNTT nhưng mà lại là khối D nên mình đang rất cố gắng học Anh.Cô giáo ở trên lớp có cho làm nhiều đề đa số thì mình có thể làm được nhưng có phần điền giới từ,trọng âm và cách phát âm các đuôi ed,s… thì mình cảm thấy ...

Nam viết 11:53 ngày 01/10/2018

Chuyển code python sang c

Tìm cặp số còn lại khác nhau

bờm là chủ hàng giày. hôm nọ check kho có 2 n chiếc giày. n chiếc phải có k.thước a1,a2,…,an n chiếc trái có b1, b2,…,bn biết hai chiếc thành một cặp khi ai = bj; tìm bao nhiêu chiếc giày cần đổi (không bằng) để bán hết 2 n giày ta có hai dãy số là số đo của n cặp giầy , cụ thể : n : 3 ...

Chuyển code python sang c

Hỏi về VCS Operations trong PHPStorm

Như title thì mỗi khi dùng Ctrl + C or Ctrl + V thì nó show ra 1 bảng bằng tầm 3 ngón tay . Hiện giờ tôi không có cách nào loại bỏ được nó . Bạn nào biết cách loại bỏ nó để dùng PHPStorm 1 cách bình thường thì chỉ dẫn giúp mình .Tôi đã tra google về điều này nhưng chung quy nó được tích vào trong ...

AkKe viết 23:44 ngày 30/09/2018

Chuyển code python sang c

Công cụ Static Site Generators em mới làm

Cũng không biết có phải gọi nó như vậy không nên gọi đại là thế Tình hình là em mới học front end mà công việc cứ lặp đi lặp lại hoài như tạo thư mục, tạo files, rồi Gulp. Nên em làm ra cái npm package luôn cho khỏi mắc công sẵn up lên npm cho ai làm biến như em cái package này cũng đơn giản à ...

viết 22:55 ngày 30/09/2018

Ta thường sử dụng C/C++ cho những công việc yêu cầu tốc độ xử lý cũng như hiệu năng cao. Vậy làm thế nào để ta có thể gọi các hàm được cung cấp trong các thư viện C từ Python? Bài viết này trả lời câu hỏi trên.

Python cung cấp module ctypes để ta có thể giao tiếp với các thư viện ngoài của C.

Load thư viện động

Để load một thư viện động, ta sử dụng hàm cdll.LoadLibrary() từ module ctypes. Đoạn code dưới đây sẽ import bộ thư viện chuẩn glibc của C trong GNU/Linux:

import ctypes as ct

libc = ct.cdll.LoadLibrary('libc.so.6')

# Or we can use CDLL
libc = ct.CDLL('libc.so.6')

Gọi hàm

Sau khi đã load được thư viện, ta có thể gọi hàm C như những hàm Python bình thường. Dưới đây ta gọi hàm printftime của C, lưu ý rằng NULL pointer trong C tương ứng với None trong Python:

libc.printf(b"Hello world! %d %s\n", 5, b"whoami")
# Hello world! 5 whomai

print(libc.time(None))
# 1150945864

None, integers, bytes objects và (unicode) strings là các kiểu dữ liệu căn bản của Python và có thể được truyền trực tiếp như là đối số khi gọi hàm C.

None tương ứng với NULL pointer, bytes objects và strings được sử dụng như là con trỏ tới vùng nhớ chứa dữ liệu của nó (char * hoặc wchar_t *). Trong ví dụ trên, ta sử dụng bytes object (b"Hello world! %d %s\n") như là con trỏ char * khi gọi hàm printf(). Kiểu integers của Python sẽ được sử dụng như int của C.

Dưới đây ta sẽ tìm hiểu rõ hơn về các kiểu dữ liệu mà ctypes hỗ trợ.

Các kiểu dữ liệu cơ bản

ctypes định nghĩa một số kiểu dữ liệu tương ứng với các kiểu dữ liệu cơ bản của C:

Chuyển code python sang c

Tất cả các kiểu này có thể được khởi tạo như sau:

>>> c_int()
c_long(0)
>>> c_wchar_p("Hello, World")
c_wchar_p('Hello, World')
>>> c_ushort(-3)
c_ushort(65533)

Và có thể thày đổi gía trị của nó:

>>> i = c_int(42)
>>> print(i)
c_long(42)
>>> print(i.value)
42
>>> i.value = -99
>>> print(i.value)
-99

Truyền con trỏ trong Python

Nhiều hàm trong C yêu cầu đối số truyền vào là một con trỏ, vì vậy ctypes cung cấp cho cho chúng ta hàm byref(). Gỉa sử ta có hàm hoán đổi gía trị của 2 số nguyên trong thư viện /home/vuong/swap.so:

void swap(int *a, int *b);

Làm thế nào để ta có thể gọi hàm đấy trong Python?

from ctypes import *

lib = cdll.LoadLibrary('/home/vuong/swap.so')

a = c_int(5)
b = c_int(13)
lib.swap(byref(a), byref(b))

Khai báo Structs và Unions

Để khai báo structures và unions, ta kế thừa 2 class tương ứng trong ctypes là StructureUnion. Mỗi subclass phải định nghĩa một thuộc tính _fields_, là một list các 2-tuples (gồm 2 trường name và type).

Gỉa sử ta có khai báo struct và union trong C:


struct UserInfo {
    char name[50];
    int age;
    float height;
};

union UTag {
    int ival;
    float fval;
    char *sval;
};

Ta có đoạn code tương ứng trong Python, sử dụng class Structure và Union:

from ctypes import *

class UserInfo(Structure):
    _fields_ = [
        ('name', c_char * 50), # array of 50 characters
        ('age', c_int),
        ('height', c_float)
    ]

class UTag(Union):
    _fields_ = [
        ('ival', c_int),
        ('fval', c_float),
        ('sval', c_char_p)
    ]

Đoạn code trên cũng minh họa khai báo mảng trong python.

Happy coding!