minishell/stdme/src/num/u64/from_bytes.c
2024-10-12 17:54:07 +02:00

57 lines
1.7 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* from_bytes.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/11 14:30:56 by maiboyer #+# #+# */
/* Updated: 2024/10/12 17:52:36 by rparodi ### ########.fr */
/* */
/* ************************************************************************** */
#include "me/num/u64.h"
t_u64 u64_from_7bytes(t_u8 *msg, t_usize start, t_usize len)
{
t_usize i;
t_usize out;
t_u64 temp_val;
i = 0;
out = 0;
if (i + 3 < len)
{
temp_val = (t_u64)(msg[start + i]);
temp_val |= (t_u64)(msg[start + i + 1]) << (8 * 1);
temp_val |= (t_u64)(msg[start + i + 2]) << (8 * 2);
temp_val |= (t_u64)(msg[start + i + 3]) << (8 * 3);
out = temp_val;
i += 4;
}
if (i + 1 < len)
{
temp_val = ((t_u64)(msg[start + i + 1]) << (8 * 1)) | (t_u64)(msg[start \
+ i]);
out |= temp_val << (i * 8);
i += 2;
}
if (i++ < len)
out |= (t_u64)(msg[start + i - 1]) << ((i - 1) * 8);
return (out);
}
t_u64 u64_from_bytes(t_u8 *bytes, t_usize len)
{
t_u64 out;
t_usize i;
i = 0;
out = 0;
while (i < len && i < 8)
{
out |= ((t_u64)(bytes[i])) << (8 * i);
i++;
}
return (out);
}