Перейти к содержанию

Программирование Как Оно Есть


call_eax

Рекомендуемые сообщения

Скажем так, в Борланде винду знают не хуже, чем те люди в мелкософте, которые пишут студию. Кроме того, API открыты, а в основном работа любых библиотек, так облегчающих кодинг под винду, состоит в вызове API из своих функций. Т.е. они по сути являют собой оболочку для API.

Насчет платформенной зависимости - это все всегда относительно. Программу, написанную на связке C++/QT, не использующую специфические системные фишки, можно считать достаточно кросс-платформенной. В том смысле, что один и тот же проект можно скомпилить под две разные системы, и есть надежда, что все пройдет хорошо. Правда, оправдывается эта надежда не всегда. Зато уж если прошло, то прошло. Это будет действительно программа, которая работает. А вот кроссплатформенность жабы... Если запустить жабную прогу на свежепоставленной винде, она покажет болт - виртуальной машины нету. На линухе аналогично - насколько я знаю, ни в один дистрибутив по дефолту java-машина не включена. А когда, наконец, виртуальная машина будет установлена, выяснится, что работает это все в 2-3 раза медленнее. Да и сам по себе язык, имхо, немного для извращенцев.

Ссылка на комментарий
Поделиться на другие сайты

Ну во-первых, писать Винду могли совсем другие люди, чем Визуал Студио. Потом не факт, что они заюзают по полной все недокументированные фичи, да и читать и просматривать эти горы... Скорее всего у них будет не такое и большое преимущество в познаниях системы и будут в основном юзаться те же открытые документы(за редким исключением).

А во-вторых, Win32 API для всех одинаковый. Поэтому в плане функциональности ничего нового они не добавят.

Допустим в скорости немного выиграют, ну и пусть, не всегда это главное для среды программирования.

+1 Lance к кросс-платформенности

Ссылка на комментарий
Поделиться на другие сайты

и еще ЕМНИП программы написанные,чтов Дельфи,что в СИ билдере занимают больше места изза того,что используют свои длл-ки,но утверждать не буду ибо не долго им(билдером) пользовался

А вообще прежде чем спорить,что лучше нужно определится для чего язык нам нужен.Коротко Паскаль проще Си++ более функциональный,отсюда все + и минусы. Рассматривать сферическую программу в вакууме - нонсенс

пример с Джавой был тупо прикол,не люблю я её, а мне её еще блин гдет 1.5 года изучать >.<,вообще если говорю Джава можно начинать искать подвох

Кстати такой вопрос имеет ли право использывать Борланд библиотеки Майкрософта,что в оригинале,что переписанные под паскаль в своих продуктах или же им их придется переписывать?

Ссылка на комментарий
Поделиться на другие сайты

Про Visual C++ Runtime не слышал? Аналог тех самых длл-ок.

Кстати такой вопрос имеет ли право использывать Борланд библиотеки Майкрософта,что в оригинале,что переписанные под паскаль в своих продуктах или же им их придется переписывать?

Оригинальные конечно может, иначе писать софт под Виндоус было бы невозможно. Потом, никто никогда не переписывает системые библиотеки под язык программирования. Скорее всего им придется написать некий промежуточный слой, чтобы делать Сишные вызовы из Паскаля. Но при компиляции разница сотрется.

Ссылка на комментарий
Поделиться на другие сайты

Блиин пойду спать,на сон осталось часов 5.Пока буду ползти к кровати подумаю,что мне в этой теме и чего от меня хотят?)))

Ссылка на комментарий
Поделиться на другие сайты

У борланда традиционно бака-компилятор, на то что он производит невозможно смотреть без слёз. Ну и весь этот ваш Билдер жёстко привязан к Windows, иначе все его преимущества сходят на нет. Писать же надо кроссплатформенно. На мой взгляд для юзерских программ не должно быть разницы под какой ОС работать, будь то Windows, Linux или MacOS.

Лично я такое пишу на Питоне, он есть везде.

Ссылка на комментарий
Поделиться на другие сайты

Опять-таки, смотря о какой кроссплатформенности идет речь. Если о возможности скомпилить под разные операционки, то в линухе есть Kуlix, так что делфа и билдер достаточно кроссплатформенны. А если о возможности запустить на разных системах один и тот же бинарик, то свои мысли по этому поводу я уже высказывал.

Ссылка на комментарий
Поделиться на другие сайты

В 7-8 классе жутко хотелось быть хакером :misato_v:

После прочтения некотрых статей в "Мании" и "Хакере" выбрал полем деятельности Си Приплюснутый. Неплохо прошел всю книжку "C++ для чайников", затем хотелось конечно же привычных окошек, кнопок, Раздобыл Visual C++ и толстенный справочник. API, классы, инициализации процессов разных - в общем это оказалось слишком :D

Ссылка на комментарий
Поделиться на другие сайты

  • 1 month later...

Начинал с ВБ, прошел паскаль и потом программил на сях, но сейчас что-то забросил это дело :)

Однако же знание языков серьезно помогает в жизни :))

Ссылка на комментарий
Поделиться на другие сайты

  • 1 month later...

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

Сейчас я пишу мой первый проект на Java.

Проблема в том, что до этого я вообще ничего не писал на Java, поэтому сейчас я столкнулся, наверное с тривиальной проблемой, но я не могу ее решить.

Смысл заключается в том, что мне нужна функция, которая преобразовывает массив байтов (byte[]) в целое число (int).

Я написал следующее:

	public static int byteArrayToInt(byte[] b) {
	ByteBuffer bb = ByteBuffer.wrap(b);
	return bb.getInt();
}

Так вот, я не знаю почему, но толи она не работает вообще, толи она работает время от времени.

На "той" стороне имеется

			for (int i = 0; i < 16; ++i) {
			System.arraycopy(bloc, 4*i, blocs[i], 0, 4);
			System.out.println(blocs[i]);
			ws[i] = byteArrayToInt(blocs[i]);
			System.out.println("ws[i] = " + ws[i]);
		}

Так вот, чаще всего значение ws равно нулю, хотя массив не содержит нулей и должен давать некое число.

Типичный пример аутпута:

[B@190d11
ws[i] = 0
[B@a90653
ws[i] = 0
[B@de6ced
ws[i] = 0
[B@c17164
ws[i] = 0
[B@1fb8ee3
ws[i] = 0
[B@61de33
ws[i] = 0

Но при этом имеется:

[B@9304b1
ws[i] = 1633837952

И

[B@a62fc3
ws[i] = 24

Не понимаю в чем дело, кучу времени на это убил.

Если важно то, как выглядит вся программа, то вот ее код целиком, под скрытым текстом (предпологается, что это программа читает цепочку бит произвольного размера в шестнадцатеричном формате и выдает соответствующий хеш размером 256 бит; я не буду объеснять как он рассчитывается, это очень долго):

package sha256;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.ByteBuffer;

/**
*
* @author USUARI
*/
public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {
	byte[] Datos;
	Datos = new byte[10000];
	int longitud;
	longitud = System.in.read(Datos);
	System.out.println(longitud);
	byte[] DatosaProcesar;
	DatosaProcesar = new byte[10000];
	int j = 0;
	for (int i = 0; i < longitud; ++i) {
		if ((Datos[i] != 32) & (Datos[i] != 13) & (Datos[i] != 10)) {
			if (Datos[i] == '0') DatosaProcesar[j] = 0;
			else {
				if (Datos[i] == '1') DatosaProcesar[j] = 1;
				else {
					if (Datos[i] == '2') DatosaProcesar[j] = 2;
					else {
						if (Datos[i] == '3') DatosaProcesar[j] = 3;
						else {
							if (Datos[i] == '4') DatosaProcesar[j] = 4;
							else {
								if (Datos[i] == '5') DatosaProcesar[j] = 5;
								else {
									if (Datos[i] == '6') DatosaProcesar[j] = 6;
									else {
										if (Datos[i] == '7') DatosaProcesar[j] = 7;
										else {
											if (Datos[i] == '8') DatosaProcesar[j] = 8;
											else {
												if (Datos[i] == '9') DatosaProcesar[j] = 9;
												else {
													if (Datos[i] == 'a') DatosaProcesar[j] = 10;
													else {
														if (Datos[i] == 'b') DatosaProcesar[j] = 11;
														else {
															if (Datos[i] == 'c') DatosaProcesar[j] = 12;
															else {
																if (Datos[i] == 'd') DatosaProcesar[j] = 13;
																else {
																	if (Datos[i] == 'e') DatosaProcesar[j] = 14;
																	else {
																		if (Datos[i] == 'f') DatosaProcesar[j] = 15;
																	}
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
			++j;
		}
	}
	byte[] FuturHash;
	FuturHash = new byte[j/2];
	j = 0;
	for (int i = 0; i < FuturHash.length; ++i) {
		FuturHash[i] = DatosaProcesar[j];
		FuturHash[i] = (byte) (FuturHash[i] << 4);
		++j;
		FuturHash[i] = (byte) (FuturHash[i] + DatosaProcesar[j]);
		++j;
	}
	System.out.println(FuturHash.length);
	BigInteger h = hash(FuturHash);
	String s = h.toString(16);
}

public static BigInteger hash(byte[] M) {
	int l = M.length;
	long longitud = l*8;
	int k = 1;
	while ((longitud + 1 + k)%512 != 448) {
		++k;
	}
	BigInteger h = new BigInteger(M);
	System.out.println(h);
	h = h.shiftLeft(1);
	System.out.println(h);
	BigInteger toAdd;
	toAdd = new BigInteger("1");
	System.out.println("toAdd = " + toAdd);
	h = h.add(toAdd);
	System.out.println(h);
	h = h.shiftLeft(k + 64);
	System.out.println(h);
	toAdd = new BigInteger("" + longitud);
	System.out.println("toAdd = " + toAdd);
	h = h.add(toAdd);
	System.out.println(h);
	int[] K;
	K = new int[64];
	K[0] = 0x428a2f98;
	K[1] = 0x71374491;
	K[2] = 0xb5c0fbcf;
	K[3] = 0xe9b5dba5;
	K[4] = 0x3956c25b;
	K[5] = 0x59f111f1;
	K[6] = 0x923f82a4;
	K[7] = 0xab1c5ed5;
	K[8] = 0xd807aa98;
	K[9] = 0x12835b01;
	K[10] = 0x243185be;
	K[11] = 0x550c7dc3;
	K[12] = 0x72be5d74;
	K[13] = 0x80deb1fe;
	K[14] = 0x9bdc06a7;
	K[15] = 0xc19bf174;
	K[16] = 0xe49b69c1;
	K[17] = 0xefbe4786;
	K[18] = 0x0fc19dc6;
	K[19] = 0x240ca1cc;
	K[20] = 0x2de92c6f;
	K[21] = 0x4a7484aa;
	K[22] = 0x5cb0a9dc;
	K[23] = 0x76f988da;
	K[24] = 0x983e5152;
	K[25] = 0xa831c66d;
	K[26] = 0xb00327c8;
	K[27] = 0xbf597fc7;
	K[28] = 0xc6e00bf3;
	K[29] = 0xd5a79147;
	K[30] = 0x06ca6351;
	K[31] = 0x14292967;
	K[32] = 0x27b70a85;
	K[33] = 0x2e1b2138;
	K[34] = 0x4d2c6dfc;
	K[35] = 0x53380d13;
	K[36] = 0x650a7354;
	K[37] = 0x766a0abb;
	K[38] = 0x81c2c92e;
	K[39] = 0x92722c85;
	K[40] = 0xa2bfe8a1;
	K[41] = 0xa81a664b;
	K[42] = 0xc24b8b70;
	K[43] = 0xc76c51a3;
	K[44] = 0xd192e819;
	K[45] = 0xd6990624;
	K[46] = 0xf40e3585;
	K[47] = 0x106aa070;
	K[48] = 0x19a4c116;
	K[49] = 0x1e376c08;
	K[50] = 0x2748774c;
	K[51] = 0x34b0bcb5;
	K[52] = 0x391c0cb3;
	K[53] = 0x4ed8aa4a;
	K[54] = 0x5b9cca4f;
	K[55] = 0x682e6ff3;
	K[56] = 0x748f82ee;
	K[57] = 0x78a5636f;
	K[58] = 0x84c87814;
	K[59] = 0x8cc70208;
	K[60] = 0x90befffa;
	K[61] = 0xa4506ceb;
	K[62] = 0xbef9a3f7;
	K[63] = 0xc67178f2;
	int H1 = 0x6a09e667;
	int H2 = 0xbb67ae85;
	int H3 = 0x3c6ef372;
	int H4 = 0xa54ff53a;
	int H5 = 0x510e527f;
	int H6 = 0x9b05688c;
	int H7 = 0x1f83d9ab;
	int H8 = 0x5be0cd19;
	byte[] hashFinal;
	hashFinal = h.toByteArray();
	int N = hashFinal.length/64;
	System.out.println ("N = " + N);
	int prueba = hashFinal.length%64;
	System.out.println(prueba);
	for (int t = 0; t < N; ++t) {
		System.out.println("t = " + t);
		int[] ws;
		ws = new int[64];
		byte[] bloc;
		bloc = new byte[64];
		System.arraycopy(hashFinal, 64*t, bloc, 0, 64);
		byte[][] blocs;
		blocs = new byte[64][4];
		for (int i = 0; i < 16; ++i) {
			System.arraycopy(bloc, 4*i, blocs[i], 0, 4);
			System.out.println(blocs[i]);
			ws[i] = byteArrayToInt(blocs[i]);
			System.out.println("ws[i] = " + ws[i]);
		}
		for (int i = 16; i < 64; ++i) {
			int wi2 = byteArrayToInt(blocs[i - 2]);
			int q1 = cyclic_right_shift(wi2, 17) ^ cyclic_right_shift(wi2, 19) ^ (wi2 >> 10);
			int wi15 = byteArrayToInt(blocs[i - 15]);
			int q0 = cyclic_right_shift(wi15, 7) ^ cyclic_right_shift(wi15, 18) ^ (wi15 >> 3);
			int wi7 = byteArrayToInt(blocs[i - 7]);
			int wi16 = byteArrayToInt(blocs[i - 16]);
			ws[i] = q1 + wi7 + q0 + wi16;
		}
		int a = H1;
		int b = H2;
		int c = H3;
		int d = H4;
		int e = H5;
		int f = H6;
		int g = H7;
		int h1 = H8;
		System.out.println("e = " + intToByteArray(e));
		System.out.println(intToByteArray(cyclic_right_shift(e, 6)));
		for (int i = 0; i < 64; ++i) {
			int E1 = cyclic_right_shift(e, 6) ^ cyclic_right_shift(e, 11) ^ cyclic_right_shift(e, 25);
			int Ch = (e & f) ^ (~e & g);
			int T1 = h1 + E1 + Ch + K[i] + ws[i];
			int E0 = cyclic_right_shift(a, 2) ^ cyclic_right_shift(a, 13) ^ cyclic_right_shift(a, 22);
			int Maj = (a & b) ^ (a & c) ^ (b & c);
			int T2 = E0 + Maj;
			h1 = g;
			g = f;
			f = e;
			e = d + T1;
			d = c;
			c = b;
			b = a;
			a = T1 + T2;
		}
		H1 = H1 + a;
		H2 = H2 + b;
		H3 = H3 + c;
		H4 = H4 + d;
		H5 = H5 + e;
		H6 = H6 + f;
		H7 = H7 + g;
		H8 = H8 + h1;
	}
	System.out.println("H1 es " + H1);
	System.out.println(intToByteArray(H1));
	System.out.println(byteArrayToInt(intToByteArray(H1)));
	h = new BigInteger(intToByteArray(H1));
	System.out.println(h);
	h = h.shiftLeft(32);
	System.out.println(h);
	BigInteger h_adicional;
	h_adicional = new BigInteger(intToByteArray(H2));
	h = h.add(h_adicional);
	System.out.println(h);
	h = h.shiftLeft(32);
	System.out.println(h);
	h_adicional = new BigInteger(intToByteArray(H3));
	h = h.add(h_adicional);
	System.out.println(h);
	h = h.shiftLeft(32);
	System.out.println(h);
	h_adicional = new BigInteger(intToByteArray(H4));
	h = h.add(h_adicional);
	System.out.println(h);
	h = h.shiftLeft(32);
	System.out.println(h);
	h_adicional = new BigInteger(intToByteArray(H5));
	h = h.add(h_adicional);
	System.out.println(h);
	h = h.shiftLeft(32);
	System.out.println(h);
	h_adicional = new BigInteger(intToByteArray(H6));
	h = h.add(h_adicional);
	System.out.println(h);
	h = h.shiftLeft(32);
	System.out.println(h);
	h_adicional = new BigInteger(intToByteArray(H7));
	h = h.add(h_adicional);
	h = h.shiftLeft(32);
	System.out.println(h);
	h_adicional = new BigInteger(intToByteArray(H8));
	h = h.add(h_adicional);
	System.out.println(h);
	System.out.println(h.toString(16));
	return h;
}

public static int byteArrayToInt(byte[] b) {
	ByteBuffer bb = ByteBuffer.wrap(b);
	return bb.getInt();
}

public static int cyclic_right_shift(int b, int shift) {
 for(int i=0; i<shift; ++i) {
	  b = (int)(((b & 0xFFFFFFFE) >>> 1) | ((b << 31) & 0x80000000));
 }
 return b;
 }

public static byte[] intToByteArray(int value) {
	byte[] b = new byte[4];
	for (int i = 0; i < 4; i++) {
		int offset = (b.length - 1 - i) * 8;
		b[i] = (byte) ((value >>> offset) & 0xFFFFFFFF);
	}
	return b;
}

}

Если что, пишу в NetBeans IDE под Widnows.

Ссылка на комментарий
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...