Size: a a a

Rust — русскоговорящее сообществo

2020 September 07

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
Но в любом случае не должно быть каких-то проблем
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Kai Ren
Ну или в Punctuated положить enum из VariantPath и token::Dot2, и после парсинга чекнуть, что Dot2 только последней позиции.
источник

A

Adv0cat in Rust — русскоговорящее сообществo
Ребят, есть #вопрос
Мне тут понадобилось буфер
[u8; 8]
в u64 перевести, самый быстрый способ как я понял это
std::mem::transmute
?
А вот в таком коде есть вероятность UB?))
let mut b = [0u8; 8];
// … write to b
let new_a = unsafe { std::mem::transmute::<[u8; 8], u64>(b) };
источник

RS

Roma S in Rust — русскоговорящее сообществo
Adv0cat
Ребят, есть #вопрос
Мне тут понадобилось буфер
[u8; 8]
в u64 перевести, самый быстрый способ как я понял это
std::mem::transmute
?
А вот в таком коде есть вероятность UB?))
let mut b = [0u8; 8];
// … write to b
let new_a = unsafe { std::mem::transmute::<[u8; 8], u64>(b) };
u64::from_{ne,le,be}_bytes
источник

RS

Roma S in Rust — русскоговорящее сообществo
Roma S
u64::from_{ne,le,be}_bytes
const fn бтв
источник

/

/bin/cat in Rust — русскоговорящее сообществo
from_ne_bytes и from_le_bytes zero cost на большинстве машин
источник

A

Adv0cat in Rust — русскоговорящее сообществo
О, спасибо большое!) Сам не нашел, а старый стековерфлов ответ говорит transmute !)
источник

V

Vitaliy in Rust — русскоговорящее сообществo
Roma S
u64::from_{ne,le,be}_bytes
кстати, а можно как-нибудь такое провернуть у слайса?
u16::from_le_bytes(&slice[8..10])

А то у меня сейчас вот так это делается, может можно как-то проще?
pub fn slice_le_to_u16(s: &[u8]) -> u16 {
   if s.len() != 2 {
       panic!("slice length must be equal 2");
   }

   (s[0] as u16) | ((s[1] as u16) << 8)
}
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Vitaliy
кстати, а можно как-нибудь такое провернуть у слайса?
u16::from_le_bytes(&slice[8..10])

А то у меня сейчас вот так это делается, может можно как-то проще?
pub fn slice_le_to_u16(s: &[u8]) -> u16 {
   if s.len() != 2 {
       panic!("slice length must be equal 2");
   }

   (s[0] as u16) | ((s[1] as u16) << 8)
}
try_into().unwrap() вроде должен сработать
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Vitaliy
кстати, а можно как-нибудь такое провернуть у слайса?
u16::from_le_bytes(&slice[8..10])

А то у меня сейчас вот так это делается, может можно как-то проще?
pub fn slice_le_to_u16(s: &[u8]) -> u16 {
   if s.len() != 2 {
       panic!("slice length must be equal 2");
   }

   (s[0] as u16) | ((s[1] as u16) << 8)
}
read_exact
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Если тебе не нужен u512 конечно хд
источник

RS

Roma S in Rust — русскоговорящее сообществo
Vitaliy
кстати, а можно как-нибудь такое провернуть у слайса?
u16::from_le_bytes(&slice[8..10])

А то у меня сейчас вот так это делается, может можно как-то проще?
pub fn slice_le_to_u16(s: &[u8]) -> u16 {
   if s.len() != 2 {
       panic!("slice length must be equal 2");
   }

   (s[0] as u16) | ((s[1] as u16) << 8)
}
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
источник

Э

Эрик in Rust — русскоговорящее сообществo
Vitaliy
кстати, а можно как-нибудь такое провернуть у слайса?
u16::from_le_bytes(&slice[8..10])

А то у меня сейчас вот так это делается, может можно как-то проще?
pub fn slice_le_to_u16(s: &[u8]) -> u16 {
   if s.len() != 2 {
       panic!("slice length must be equal 2");
   }

   (s[0] as u16) | ((s[1] as u16) << 8)
}
let s: &[u8] = … ;
assert!(s.len() >= N);
let arr: [u8; N] = unsafe { *(s.as_ptr() as *const [u8; N]) };
from_le_bytes(arr)
источник

/

/bin/cat in Rust — русскоговорящее сообществo
let mut buf = [0u8; 2];
slice.read_exact(&mut buf).unwrap();
u16::from_le_bytes(buf);
источник

/

/bin/cat in Rust — русскоговорящее сообществo
И никаких unsafe
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
да зачем вы такие извращения придумываете.....
источник

Э

Эрик in Rust — русскоговорящее сообществo
вафель 🧇
да зачем вы такие извращения придумываете.....
Я максимально быструю штуку просто описал.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Я максимально быструю штуку просто описал.
но зачем если можно просто юзать TryInto?
источник

/

/bin/cat in Rust — русскоговорящее сообществo
вафель 🧇
но зачем если можно просто юзать TryInto?
А если нужно сделать конверт в массив, который больше 32 байт?
источник