У меня есть метод в c # только с 1 параметром (это переопределение, поэтому я не могу изменить его сигнатуру для включения большего количества параметров):
read_address(long adr)
где adr - адресная память, которую я хочу прочитать, но я должен передать адрес и одновременно указать, является ли адрес для чтения 16- или 32-битным, а если 32-битным, более того, я должен указать, хочу ли я читать верхнее или нижнее слово, поэтому я хотел бы узнать эффективный способ сделать это с помощью параметра adr.
Я подумал построить маску, например, если я хочу прочитать адрес 614 (десятичный), я могу добавить две цифры до или назад:
10614: первая цифра 1 обозначает размер = 32 бита, а вторая 0 = младшее слово
11614: первая цифра 1 обозначает размер = 32 бита, а вторая 1 = старшее слово
для обозначения 16 бит, нет необходимости указывать нижний или верхний, поэтому:
00614 = 614 будет означать 16-бит.
Также я могу сделать это, вернув эти две цифры обратно:
61410
61411
Поэтому, когда я получаю это число через параметр addr, мне нужно проанализировать его, чтобы узнать, является ли оно 16 или 32-разрядным, а в случае 32 - младшим или верхним словом.
РЕДАКТИРОВАНИЕ:
Я думаю, что не очень хорошо объяснил ...
Например, представьте, что этот метод read_address, receive и address (addr) для чтения. Это вызывается из другого метода method_A, который знает, является ли он 16- или 32-разрядным, а если 32-разрядным, он разделяется на два слова. Лучший пример для чтения 614:
Method_A(....)
{
if 16-bit then
{
call read_address(620) // Supose 620 is 16 bit
}
if 32-bit then
{
// suppose 614 is 32 bit so split into two reads
call read_address(61410) // to read first word
call read_address(61411) // to read second word
}
}
поэтому в read_address я должен знать, является ли он 16- или 32-разрядным, а если 32-разрядным, я также должен знать, является ли оно нижним или верхним словом.
read_address(long addr)
{
// decode if addr is 16 or 32 bit and if 32 bit, decode if lower
// or upper word and do some stuff
// So suppose it arrives 61410... how to decode it in order to know,
// address to read is 614 and is 32-bit (1) and I want to read lower word (0)
}