Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 12.07.2015
Сообщений: 8

Что делает метод?

02.01.2020, 12:54. Показов 3172. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Подскажите пожалуйста, как будет выглядеть данный фрагмент кода на C#.
C++
1
2
3
4
5
6
7
std::string StrUtils::pad_with_number(const std::string & str, unsigned int num)
{
    std::string res(4, 0);
    res.append(str);
    *reinterpret_cast<unsigned int*>(&res[0]) = num;
    return res;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.01.2020, 12:54
Ответы с готовыми решениями:

Что это за метод?И что он делает?
double func (double y, int k, int n){ double y1; for (int i=0; i&lt;=n+1;i++) y1=0; double t; t=0; y1=1; ...

Что делает метод cin.ignore?
cin.ignore(0,'\n'); Что она делает?

что делает эта программа распишите пожалуйста? это ведь метод прогонки?
что делает эта программа распишите пожалуйста? это ведь метод прогонки? #include &lt;cstdio&gt; #include &lt;math.h&gt; #include...

13
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
02.01.2020, 15:06
Лучший ответ Сообщение было отмечено Mars1c как решение

Решение

Мне говорили что если код доходит до reinterpret_cast тогда вы что то делаете не правильно
В данном случае мы битовую маску строки представляем как unsigned int* и меняем её на битовую маску num

На С# без Unsafe этого вроде нельзя сделать

Пример: мы запихнём строку example и unsigned int 1 094 795 585‬
(В бинарном виде этот unsigned int)

Code
1
01000001 01000001 01000001 01000001‬
Если разделить эту маску по байтам, получится что каждый байт будет соответствовать символу 'A'
На выходе будет
AAAAexample

Вроде(не проверял)
1
0 / 0 / 0
Регистрация: 12.07.2015
Сообщений: 8
02.01.2020, 15:20  [ТС]
AndryS1, не подскажете, что значит эта строка
C++
1
std::string res(4, 0);
? (я очень далёк от C++)
0
фрилансер
 Аватар для Алексей1153
6444 / 5639 / 1128
Регистрация: 11.10.2019
Сообщений: 15,003
02.01.2020, 15:30
Mars1c, в этой строке должно быть в данном случае
C++
1
std::string res(sizeof(unsigned int*), '\0');
выделение внутреннего буфера под указанное количество элементов, инициализация их нулями
1
 Аватар для nyaka_wai
85 / 34 / 20
Регистрация: 15.12.2019
Сообщений: 89
02.01.2020, 15:31
Цитата Сообщение от Mars1c Посмотреть сообщение
AndryS1, не подскажете, что значит эта строка
C++
1
std::string res(4, 0);
? (я очень далёк от C++)
Мне тоже было бы интересно узнать, учитывая то, что в классе string нет такого конструктора.

C++
1
2
3
4
    String(char* _str = "");
    String(const String&);
 
    ~String();
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.01.2020, 15:37
Алексей1153, может быть sizeof все-таки не от указателя нужен? )

Цитата Сообщение от nyaka_wai Посмотреть сообщение
учитывая то, что в классе string нет такого конструктора.
Есть же )
0
фрилансер
 Аватар для Алексей1153
6444 / 5639 / 1128
Регистрация: 11.10.2019
Сообщений: 15,003
02.01.2020, 15:39
Цитата Сообщение от DrOffset Посмотреть сообщение
может быть sizeof все-таки не от указателя нужен
это да, погорячился

а ещё лучше sizeof(num)
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
02.01.2020, 15:50
Цитата Сообщение от nyaka_wai Посмотреть сообщение
AndryS1, не подскажете, что значит эта строка
Это заполнение строки 4-мя символами NULL

Цитата Сообщение от nyaka_wai Посмотреть сообщение
Мне тоже было бы интересно узнать, учитывая то, что в классе string нет такого конструктора.
Мда?) А так?) std::string(4,'4');
0
 Аватар для nyaka_wai
85 / 34 / 20
Регистрация: 15.12.2019
Сообщений: 89
02.01.2020, 15:59
Цитата Сообщение от AndryS1 Посмотреть сообщение
ЭМда?) А так?) std::string(4,'4');
Наверное я просто не по той библиотеке посмотрел документацию) string.h, а не string

Кликните здесь для просмотра всего текста
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
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#ifndef STRING_H
#define STRING_H
 
#include <iostream>
 
namespace STD
{
 
int StrLen(char*);
void StrCpy(char*, char*);
bool StrCmp(char*, char*);
 
class String
{
public:
    String(char* _str = "");
    String(const String&);
 
    ~String();
 
    String& operator=(const String&);
    friend String operator+(const String&, const String&);
    String& operator+=(const String&);
 
    friend bool operator==(const String&, const String&);
    friend bool operator!=(const String&, const String&);
    friend bool operator>(const String&, const String&);
    friend bool operator>=(const String&, const String&);
    friend bool operator<(const String&, const String&);
    friend bool operator<=(const String&, const String&);
 
    const char& operator[](int) const;
    char& operator[](int);
 
    friend std::ostream& operator<<(std::ostream&, const String&);
    friend std::istream& operator>>(std::istream&, String&);
 
private:
    char* str;
};
 
String::String(char* _str)
{
    str = new char[StrLen(_str)+1];
    StrCpy(str, _str);
}
 
String::String(const String& rhs)
{
    str = new char[StrLen(rhs.str)+1];
    StrCpy(str, rhs.str);
}
 
String::~String()
{
    delete str;
}
 
// ---
 
String& String::operator=(const String& rhs)
{
    if (this != &rhs)
    {
        delete[] this->str;
        this->str = new char[StrLen(rhs.str)+1];
        StrCpy(this->str, rhs.str);
    }
 
    return *this;
}
 
String& String::operator+=(const String& rhs)
{
    int sz = StrLen(this->str) + StrLen(rhs.str);
 
    char* ts = new char[sz+1];
 
    for (int i = 0; i < StrLen(this->str); i++)
        ts[i] = this->str[i];
    for (int ii = StrLen(this->str), j = 0; ii <= sz; ii++, j++)
        ts[ii] = rhs.str[j];
 
    delete this->str;
    this->str = ts;
 
    return *this;
}
 
String operator+(const String& lhs, const String& rhs)
{
    String ts = lhs;
 
    return ts += rhs;
}
 
// --
 
bool operator==(const String& lhs, const String& rhs)
{
    return StrCmp(lhs.str, rhs.str);
}
 
bool operator!=(const String& lhs, const String& rhs)
{
    return !(StrCmp(lhs.str, rhs.str));
}
 
bool operator>(const String& lhs, const String& rhs)
{
    return (StrLen(lhs.str) > StrLen(rhs.str)) ? true : false;
}
 
bool operator>=(const String& lhs, const String& rhs)
{
    return (StrLen(lhs.str) >= StrLen(rhs.str)) ? true : false;
}
 
bool operator<(const String& lhs, const String& rhs)
{
    return (StrLen(lhs.str) < StrLen(rhs.str)) ? true : false;
}
 
bool operator<=(const String& lhs, const String& rhs)
{
    return (StrLen(lhs.str) <= StrLen(rhs.str)) ? true : false;
}
 
// ---
 
const char& String::operator[](int i) const
{
    //std::cerr << "Index out of range. \n";
    return (i >= 0 && i < StrLen(this->str)) ? this->str[i] : 0;
}
 
char& String::operator[](int i)
{
    static char DUMMY; DUMMY = '';
    //std::cerr << "Index out of range. \n";
    return (i >= 0 && i < StrLen(this->str)) ? this->str[i] : DUMMY;
}
 
// ---
 
std::ostream& operator<<(std::ostream& os, const String& obj)
{
    return os << obj.str;
}
 
std::istream& operator>>(std::istream& is, String& obj)
{
    char BUFF[2048];
 
    is.getline(BUFF, sizeof BUFF);
    obj = BUFF;
 
    return is;
}
 
// ---
 
int StrLen(char* _str)
{
    int size = 0;
 
    for (; _str[size] != 0; size++);
 
    return size;
}
 
void StrCpy(char* in_str, char* src_str)
{
    for (int i = 0; i < StrLen(in_str); i++)
        in_str[i] = src_str[i];
}
 
bool StrCmp(char* str_f, char* str_s)
{
    int i = 0;
 
    for (; str_f[i] == str_s[i] && i < StrLen(str_f); i++);
 
    return (i == StrLen(str_f)) ? true : false;
}
 
}
 
#endif
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.01.2020, 16:07
Лучший ответ Сообщение было отмечено Mars1c как решение

Решение

Цитата Сообщение от Mars1c Посмотреть сообщение
на C#.
Цитата Сообщение от Mars1c Посмотреть сообщение
C++
1
*reinterpret_cast<unsigned int*>(&res[0]) = num;
Я думаю, что процитированное можно спокойно заменить на
C#
1
BitConverter.GetBytes(num);

Видимо что-то такое должно получиться:
C#
1
2
3
4
5
6
7
8
9
        public static byte[] pad_with_number(string str, Int32 num)
        {
            byte[] numBytes = BitConverter.GetBytes(num);
            byte[] strBytes = ASCIIEncoding.ASCII.GetBytes(str);
            byte[] ret = new byte[numBytes.Length + strBytes.Length];
            Buffer.BlockCopy(numBytes, 0, ret, 0, numBytes.Length);
            Buffer.BlockCopy(strBytes, 0, ret, numBytes.Length, strBytes.Length);
            return ret;
        }
https://rextester.com/VBR89253

Добавлено через 5 минут
ASCIIEncoding можно заменить UTF8Encoding или другие подходящие (в зависимости от того, что в С++ предполагалось хранить в str)
1
0 / 0 / 0
Регистрация: 12.07.2015
Сообщений: 8
02.01.2020, 16:47  [ТС]
DrOffset, спасибо огромное!

Добавлено через 38 минут
DrOffset, Вы мне очень помогли. Если не составит труда, скажите пожалуйста, как этот блок кода будет выглядеть в C#. В общих чертах я понимаю, что pad_size раз добавляет символ 0x01, но как такая конструкция if может выглядеть в C#.
C++
1
2
3
4
5
6
std::size_t pad_size = 0;
    if (enc_size & 0xF)
    {
        pad_size = 0x10 - (enc_size & 0xF);
    }
    enc_inner.append(pad_size, 0x01); // Padding
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.01.2020, 16:58
Mars1c, что такое enc_inner?
0
0 / 0 / 0
Регистрация: 12.07.2015
Сообщений: 8
02.01.2020, 17:00  [ТС]
DrOffset, enc_inner, это кодированная строка.
C++
1
std::size_t enc_size = enc_inner.size() + before_crypt.size();
enc_size (length) сумма длин строк, если я правильно понимаю.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.01.2020, 17:00
Лучший ответ Сообщение было отмечено Mars1c как решение

Решение

Цитата Сообщение от Mars1c Посмотреть сообщение
как такая конструкция if может выглядеть в C#.
Да точно также практически.

C++
1
2
3
4
5
6
            
UInt64 pad_size = 0;
if ((enc_size & 0xF) != 0)
{
    pad_size = 0x10 - (enc_size & 0xF);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.01.2020, 17:00
Помогаю со студенческими работами здесь

Не могу понять на что способен sort, и что делает его компаратор
Недавно мой знакомый рассказывал что-то про sort,говорил что с помощью него можно сортировать как хочешь и что хочешь,с сортировкой qSort и...

Что в программе делает так, что процессор грузится на 100%?
Я не очень разбираюсь в С++, поэтому прошу вашей подсказки по поводу нагрузки на процессор. Вот код программы, на компьютере жрет всю...

Я не могу понять что делает данная программа. Точнее что делают функции используемые в это коде
#include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;ctime&gt; using namespace std; int g(int a, int n); int s(int a, int n); int...

Что это за знак >> прочитал что это сдвиг вправо? что он делает
int d=6, c=5,f; f = d &gt;&gt; c; cout&lt;&lt; f; вывод 0

что этот метод делает , что значит ?
protected void getImageDimensions() { width = image.getWidth(null); height = image.getHeight(null); }


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru