Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 11.07.2015
Сообщений: 7

Перевести код с С++ на Python

04.02.2017, 17:13. Показов 1769. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача такова. Переместить байты по заданному алгоритму, есть пример файла, параметры Width = 256, Height = 256
https://yadi.sk/d/SKV8P47s3CptBc

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
 
namespace VrSharp
{
    public static class SvrSwizzle
    {
        // Unswizzle an 8-bit PS2 texture
        public static void UnSwizzle8(byte[] Buf, int Width, int Height, int Where)
        {
            // Don't unswizzle if dimenions are smaller than 128x64
            if (Width < 128 || Height < 64)
                return;
 
            // Make a copy of the swizzled input
            byte[] Swizzled = new byte[Buf.Length - Where];
            Array.Copy(Buf, Where, Swizzled, 0, Swizzled.Length);
 
            for (int y = 0; y < Height; y++)
            {
                for (int x = 0; x < Width; x++)
                {
                    int block_location = (y & (~0xf)) * Width + (x & (~0xf)) * 2;
                    int swap_selector = (((y + 2) >> 2) & 0x1) * 4;
                    int posY = (((y & (~3)) >> 1) + (y & 1)) & 0x7;
                    int column_location = posY * Width * 2 + ((x + swap_selector) & 0x7) * 4;
 
                    int byte_num = ((y >> 1) & 1) + ((x >> 2) & 2);     // 0,1,2,3
 
                    Buf[Where + (y * Width) + x] = Swizzled[block_location + column_location + byte_num];
                }
            }
        }
    }
}
Переведите пожалуйста в Python.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2017, 17:13
Ответы с готовыми решениями:

Перевести код из СИ в Python
#include &lt;stdio.h&gt; #include &lt;math.h&gt; typedef float (*func)(float); float f1(float x) { return ( x * ( ( x + 1.5 ) / ( x...

Перевести код С++ на Python
#include &lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cmath&gt; using namespace std; const int n=10; double X; int i; double...

Перевести код с С++ на Python
Задача такова. Дан символьный массив. Вывести на печать те слова, в которых первая буква слова встречается в нём ещё 1 раз. Задача сделана...

1
0 / 0 / 1
Регистрация: 11.07.2015
Сообщений: 7
17.06.2017, 18:43  [ТС]
Лучший ответ Сообщение было отмечено takerya как решение

Решение

Всё переписал, алгоритм для наложения и снятия с 8 битных текстур swizzling Tm2.
Тему можно закрывать.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
# Снятие и наложение с картинки swizzling Tm2
 
import os, sys
import struct
import time
import io
import datetime
 
swizzling = True # Снимает True и накладывает False
 
path = os.path.realpath(os.path.dirname(sys.argv[0]))
    
def Unpack(mult_file):
    print(mult_file)
    if swizzling:
        print("Снимает swizzling")
    else:
        print("Накладывает swizzling")
 
    f = open(path+""+""+mult_file,"rb")
    f2 = open(path+""+"\\Unpack"+mult_file[:-4]+" Проверка.tm2", "wb")
    f.seek(36)
    width = struct.unpack("<H",f.read(2))[0]  # Читаем ширину
    height = struct.unpack("<H",f.read(2))[0] # Читаем высоту
    print(width,height)
    
    f.seek(0)
    heading = f.read(64) # Заголовок
    readbuf = f.read(width*height)
    palette = f.read(1024) # Палитра
    buffer = bytearray(len(readbuf)) # Буффер для записи байт
 
    # x это номер байта на строчки, y это номер строчки по высоте картинки
    for y in range(height):
        for x in range(width):
            block_location = (y & (~15)) * width + (x & (~15)) * 2
            swap_selector = (((y + 2) >> 2) & 1) * 4
            posY = (((y & (~3)) >> 1) + (y & 1)) & 7
            column_location = posY * width * 2 + ((x + swap_selector) & 7) * 4
            byte_num = ((y >> 1) & 1) + ((x >> 2) & 2)
 
            offset_1 = 0 + (y * width) + x # Откуда читаем байт
            offset_2 = block_location + column_location + byte_num # Куда записываем байт
            #print(offset_1,offset_2,"  x",x,"y",y, "posY",posY,"byte_num",byte_num)
            if swizzling: # Снимает swizzling
                buffer[offset_1:offset_1+2] = readbuf[offset_2:offset_2+2]
            else: # Накладывает swizzling
                buffer[offset_2:offset_2+1] = readbuf[offset_1:offset_1+1]
 
    f2.write(heading)
    f2.write(buffer)
    f2.write(palette)
    f2.close()
    f.close()
 
def main():
    if os.path.exists(path+"\\Unpack") == False:
        os.makedirs(path+"\\Unpack")
    for mult_file in os.listdir(path+""):
        if mult_file.lower().endswith(('.tm2')):
            Unpack(mult_file)
    print("Закрыть")
 
if __name__ == "__main__":
    main()
    input()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2017, 18:43
Помогаю со студенческими работами здесь

Перевести код с Python на C#
перевести и Python на C# import sys lineIn = sys.stdin.readline().split(&quot; &quot;) n = int(lineIn) m = int(lineIn) fibPrev = 0 ...

Перевести код из C в Python
Перевести код из C в Python #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; //Каждый уровень хранит число сотрудников и ссылку на...

Перевести код из СИ в Python
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;windows.h&gt; char bufRus; char* ru(const char*text) { ...

Перевести код на python
uses crt; function F(x:real):real; begin F:=cos(2/x)-2*sin(1/x)+1/x; end; function F1(x:real):real;{1 производная} begin ...

Перевести код из СИ в Python
#include &lt;stdio.h&gt; #include &lt;math.h&gt; typedef float (*func)(float); float f1(float x) { return ( x * ( ( x + 1.5 ) / ( x...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru