Преобразование Java в C# — типы int uint

Я конвертирую код из java в c # и застрял с int и uint. Java-код (отрывок):

public static final int SCALE_PROTO4_TBL    = 15;
public static final int [] sbc_proto_4 = { 0xec1f5e60 >> SCALE_PROTO4_TBL };

Преобразованный код С# (отрывок):

public const int SCALE_PROTO4_TBL = 15;
int[] sbc_proto_4 = new int[] { 0xec1f5e60 >> SCALE_PROTO4_TBL };

Это приводит к следующей ошибке компиляции: Ошибка CS0266 Невозможно неявно преобразовать тип "uint" в "int". Существует явное преобразование (вам не хватает приведения?)

Существует много кода, подобного приведенному выше, но я не уверен, должен ли я преобразовывать все Java int в C # uint? Насколько я помню, С# uint не хранит отрицательные значения, если java int является отрицательным числом, тогда у меня возникла проблема.

Любой вклад в то, как я должен подходить к проблеме?


person user1005448    schedule 12.11.2015    source источник
comment
вам нужно явно привести uint к int. Но учитывая, что это может привести к потере данных.   -  person Jean    schedule 12.11.2015


Ответы (1)


Вы можете попробовать так:

int[] sbc_proto_4 = new int[] { unchecked((int)0xec1f5e60) >> SCALE_PROTO4_TBL };

т. е. вы должны явно указать uint(0xec1f5e60).

person Rahul Tripathi    schedule 12.11.2015
comment
Я знаю ключевое слово unchecked, но не могу его использовать. Например. если вы распечатаете значение 0xec1f5e60, вы увидите 3961478752. Если вы преобразуете его с помощью ключевого слова unchecked, значение будет -333488544. - person user1005448; 12.11.2015
comment
Думаю, мне нужно просто long вместо int - person user1005448; 12.11.2015
comment
@ user1005448:- Дело в том, что вам нужно сделать явное приведение вашего значения uint. Я не уверен, какое значение вы хотите использовать в своем контексте. Надеюсь, теперь вы понимаете причину ошибки и способы ее устранения. - person Rahul Tripathi; 12.11.2015
comment
Нельзя использовать long в качестве типа данных, поскольку ›› указывает, что второй должен быть типа int - person user1005448; 12.11.2015
comment
@ user1005448: - В чем проблема с int[] sbc_proto_4 = new int[] { (int)0xec1f5e60 >> SCALE_PROTO4_TBL };? - person Rahul Tripathi; 12.11.2015
comment
он дает следующую ошибку компиляции: Ошибка CS0221 Постоянное значение «3961478752» не может быть преобразовано в «int» (используйте синтаксис «unchecked» для переопределения) - person user1005448; 12.11.2015
comment
@ user1005448:- Итак, теперь вы поняли, верно? то есть вы должны использовать ключевое слово unchecked, которое я добавил в свой ответ :) - person Rahul Tripathi; 12.11.2015
comment
Нельзя использовать unchecked, потому что 0xec1f5e60 переполнится и даст отрицательное число. - person user1005448; 12.11.2015
comment
Я попытался посмотреть на шестнадцатеричное значение, которое то же самое, поэтому я приму ваш ответ, чтобы использовать его без проверки. Спасибо за ваше время. - person user1005448; 12.11.2015