Инициализация массива однобайтовыми буквами
Есть ли в C# способ вот такое
byte * name = stackalloc byte [8];
name[0] = (byte )'v' ;
name[1] = (byte )'e' ;
name[2] = (byte )'r' ;
name[3] = (byte )'s' ;
name[4] = (byte )'i' ;
name[5] = (byte )'o' ;
name[6] = (byte )'n' ;
name[7] = 0;
записать как-то покрасивше?
Re: Инициализация массива однобайтовыми буквами
От:
Sinatr
Дата: 20.12.13 08:05
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:
СГ>СГ>byte * name = stackalloc byte [8];
СГ>
А это точно С#?
Можно написать свою функцию (для красивости — метод расширения). А можно поюзать
String.ToCharArray() (и дальше linq, если нужно, а то я хз).
---
ПроГLамеры объединяйтесь..
Re[2]: Инициализация массива однобайтовыми буквами
От:
Sinatr
Дата: 20.12.13 08:08
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:
Забыл добавить, что нолик представляется как "\0" (или "\x00" или может еще как).
---
ПроГLамеры объединяйтесь..
Re[2]: Инициализация массива однобайтовыми буквами
От:
Аноним
Дата: 20.12.13 08:18
Оценка:
Здравствуйте, Sinatr, Вы писали:
S>Можно написать свою функцию (для красивости — метод расширения). А можно поюзать String.ToCharArray() (и дальше linq, если нужно, а то я хз).
Т.е. так?
Byte[] name = (from ch in "version\0" .ToCharArray() select (Byte)ch).ToArray();
Re[3]: Инициализация массива однобайтовыми буквами
Здравствуйте, Аноним, Вы писали:
А>Т.е. так?Byte[] name = (from ch in "version\0" .ToCharArray() select (Byte)ch).ToArray();
Ну оверхед же!
Re: Инициализация массива однобайтовыми буквами
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Есть ли в C# способ вот такое
СГ>СГ>byte * name = stackalloc byte [8];
СГ>name[0] = (byte )'v' ;
СГ>name[1] = (byte )'e' ;
СГ>name[2] = (byte )'r' ;
СГ>name[3] = (byte )'s' ;
СГ>name[4] = (byte )'i' ;
СГ>name[5] = (byte )'o' ;
СГ>name[6] = (byte )'n' ;
СГ>name[7] = 0;
СГ>
СГ>записать как-то покрасивше?
byte [] name = new [] { (byte )'v' , (byte )'e' , (byte )'s' , (byte )'i' , (byte )'o' , (byte )'n' };
Так не подойдет?
Re: Инициализация массива однобайтовыми буквами
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Есть ли в C# способ вот такое
СГ>СГ>byte * name = stackalloc byte [8];
СГ>name[0] = (byte )'v' ;
СГ>name[1] = (byte )'e' ;
СГ>name[2] = (byte )'r' ;
СГ>name[3] = (byte )'s' ;
СГ>name[4] = (byte )'i' ;
СГ>name[5] = (byte )'o' ;
СГ>name[6] = (byte )'n' ;
СГ>name[7] = 0;
СГ>
СГ>записать как-то покрасивше?
Если нравится LINQ, то:
static char [] arr = new [] {'v' , 'e' , 'r' , 's' , 'i' , 'o' , 'n' };
static byte [] mas = arr.Select(r => (byte )r).ToArray();
Re[4]: Инициализация массива однобайтовыми буквами
Здравствуйте, grigorash, Вы писали:
А>>Т.е. так?Byte[] name = (from ch in "version\0" .ToCharArray() select (Byte)ch).ToArray();
G>Ну оверхед же!
А в чем оверхед? Конвертацию же нужно произвести все равно.
Re[3]: Инициализация массива однобайтовыми буквами
От:
Jack128
Дата: 20.12.13 09:32
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Sinatr, Вы писали:
S>>Можно написать свою функцию (для красивости — метод расширения). А можно поюзать String.ToCharArray() (и дальше linq, если нужно, а то я хз).
А>Т.е. так?Byte[] name = (from ch in "version\0" .ToCharArray() select (Byte)ch).ToArray();
ToCharArray — можно убрать
Re: Инициализация массива однобайтовыми буквами
Здравствуйте, Сергей Губанов, Вы писали:
СГ>записать как-то покрасивше?
Encoding.ASCII.GetBytes("version\0" )
Re: Инициализация массива однобайтовыми буквами
Полное решение
var tmp = Encoding.ASCII.GetBytes("version\0" );
byte * name = stackalloc byte [tmp.Length];
Marshal.Copy(tmp, 0, new IntPtr(name), tmp.Length);
Re[5]: Инициализация массива однобайтовыми буквами
Здравствуйте, Nikolay_Ch, Вы писали:
N_C>А в чем оверхед? Конвертацию же нужно произвести все равно.
В чём, в чём… В синтаксисе, конечно же.
Re: Инициализация массива однобайтовыми буквами
Здравствуйте, Сергей Губанов, Вы писали:
СГ>записать как-то покрасивше?
var name = System.Text.Encoding.ASCII.GetBytes("version")
писал по памяти, но смысл такой
Помните!!! ваш говнокод кому-то предстоит разгребать.
Re[2]: Инициализация массива однобайтовыми буквами
От:
Igorxz
Дата: 25.12.13 09:07
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:
SS>Полное решение
SS>SS> var tmp = Encoding.ASCII.GetBytes("version\0" );
SS> byte * name = stackalloc byte [tmp.Length];
SS> Marshal.Copy(tmp, 0, new IntPtr(name), tmp.Length);
SS>
смысл вот такой конструкции:
byte * name = stackalloc byte [...];
в том, чтобы алокатить память не в управляемой куче, а на стеке.
а вот это:
var tmp = Encoding.ASCII.GetBytes("version\0" );
вызовет неявную алокацию массива в управляемой куче.
тогда вот это:
byte * name = stackalloc byte [...];
уже бессмыслено.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить