Преобразуйте массив байтов в короткий массив в C#

Я избежал бы использования мега API как апачское свободное городское население. Это - упрощенная операция и его встроенный в JDK в новом пакете NIO. Это было отчасти уже связано с в предыдущем ответе, но ключевой метод в API NIO является новыми функциями "transferTo" и "transferFrom".

http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html#transferTo (долго, %20long, %20java.nio.channels. WritableByteChannel)

Одна из связанных статей показывает отличный способ о том, как интегрировать эту функцию в Ваш код, с помощью transferFrom:

public static void copyFile(File sourceFile, File destFile) throws IOException {
    if(!destFile.exists()) {
        destFile.createNewFile();
    }

    FileChannel source = null;
    FileChannel destination = null;

    try {
        source = new FileInputStream(sourceFile).getChannel();
        destination = new FileOutputStream(destFile).getChannel();
        destination.transferFrom(source, 0, source.size());
    }
    finally {
        if(source != null) {
            source.close();
        }
        if(destination != null) {
            destination.close();
        }
    }
}

Изучение NIO может быть немного хитрым, таким образом, Вы могли бы хотеть просто доверять этому механику перед уходом и попыткой изучить NIO в течение ночи. От личного опыта это может быть очень твердая вещь учиться, не имеете ли Вы опыта и были представлены IO через java.io потоки.

12
задан williamtroup 9 July 2009 в 15:23
поделиться

5 ответов

One возможность - использовать Enumerable.Select :

byte[] bytes;
var shorts = bytes.Select(b => (short)b).ToArray();

Другой вариант - использовать Array.ConvertAll :

byte[] bytes;
var shorts = Array.ConvertAll(bytes, b => (short)b);
12
ответ дан 2 December 2019 в 02:53
поделиться
 short[] wordArray = Array.ConvertAll(byteArray, (b) => (short)b);
0
ответ дан 2 December 2019 в 02:53
поделиться
byte[] bytes;
var shorts = bytes.Select(n => System.Convert.ToInt16(n)).ToArray();
-2
ответ дан 2 December 2019 в 02:53
поделиться

A shorthard is a compound of two bytes. If you are writing all the shorts to the file as true shorts then those conversions are wrong. You must use two bytes to get the true short value, using something like:

short s = (short)(bytes[0] | (bytes[1] << 8))
3
ответ дан 2 December 2019 в 02:53
поделиться
short value = BitConverter.ToInt16(bytes, index);
1
ответ дан 2 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: