byte order form webrtc soure file
来源:互联网 发布:基础网络的构成 编辑:程序博客网 时间:2024/06/18 02:33
/* * Copyright 2004 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */// Reading and writing of little and big-endian numbers from memory// TODO: Optimized versions, with direct read/writes of// integers in host-endian format, when the platform supports it.#include <stdint.h>#include <stddef.h>inline void Set8(void* memory, size_t offset, uint8_t v) { static_cast<uint8_t*>(memory)[offset] = v;}inline uint8_t Get8(const void* memory, size_t offset) { return static_cast<const uint8_t*>(memory)[offset];}inline void SetBE16(void* memory, uint16_t v) { Set8(memory, 0, static_cast<uint8_t>(v >> 8)); Set8(memory, 1, static_cast<uint8_t>(v >> 0));}inline void SetBE32(void* memory, uint32_t v) { Set8(memory, 0, static_cast<uint8_t>(v >> 24)); Set8(memory, 1, static_cast<uint8_t>(v >> 16)); Set8(memory, 2, static_cast<uint8_t>(v >> 8)); Set8(memory, 3, static_cast<uint8_t>(v >> 0));}inline void SetBE64(void* memory, uint64_t v) { Set8(memory, 0, static_cast<uint8_t>(v >> 56)); Set8(memory, 1, static_cast<uint8_t>(v >> 48)); Set8(memory, 2, static_cast<uint8_t>(v >> 40)); Set8(memory, 3, static_cast<uint8_t>(v >> 32)); Set8(memory, 4, static_cast<uint8_t>(v >> 24)); Set8(memory, 5, static_cast<uint8_t>(v >> 16)); Set8(memory, 6, static_cast<uint8_t>(v >> 8)); Set8(memory, 7, static_cast<uint8_t>(v >> 0));}inline uint16_t GetBE16(const void* memory) { return static_cast<uint16_t>((Get8(memory, 0) << 8) | (Get8(memory, 1) << 0));}inline uint32_t GetBE32(const void* memory) { return (static_cast<uint32_t>(Get8(memory, 0)) << 24) | (static_cast<uint32_t>(Get8(memory, 1)) << 16) | (static_cast<uint32_t>(Get8(memory, 2)) << 8) | (static_cast<uint32_t>(Get8(memory, 3)) << 0);}inline uint64_t GetBE64(const void* memory) { return (static_cast<uint64_t>(Get8(memory, 0)) << 56) | (static_cast<uint64_t>(Get8(memory, 1)) << 48) | (static_cast<uint64_t>(Get8(memory, 2)) << 40) | (static_cast<uint64_t>(Get8(memory, 3)) << 32) | (static_cast<uint64_t>(Get8(memory, 4)) << 24) | (static_cast<uint64_t>(Get8(memory, 5)) << 16) | (static_cast<uint64_t>(Get8(memory, 6)) << 8) | (static_cast<uint64_t>(Get8(memory, 7)) << 0);}inline void SetLE16(void* memory, uint16_t v) { Set8(memory, 0, static_cast<uint8_t>(v >> 0)); Set8(memory, 1, static_cast<uint8_t>(v >> 8));}inline void SetLE32(void* memory, uint32_t v) { Set8(memory, 0, static_cast<uint8_t>(v >> 0)); Set8(memory, 1, static_cast<uint8_t>(v >> 8)); Set8(memory, 2, static_cast<uint8_t>(v >> 16)); Set8(memory, 3, static_cast<uint8_t>(v >> 24));}inline void SetLE64(void* memory, uint64_t v) { Set8(memory, 0, static_cast<uint8_t>(v >> 0)); Set8(memory, 1, static_cast<uint8_t>(v >> 8)); Set8(memory, 2, static_cast<uint8_t>(v >> 16)); Set8(memory, 3, static_cast<uint8_t>(v >> 24)); Set8(memory, 4, static_cast<uint8_t>(v >> 32)); Set8(memory, 5, static_cast<uint8_t>(v >> 40)); Set8(memory, 6, static_cast<uint8_t>(v >> 48)); Set8(memory, 7, static_cast<uint8_t>(v >> 56));}inline uint16_t GetLE16(const void* memory) { return static_cast<uint16_t>((Get8(memory, 0) << 0) | (Get8(memory, 1) << 8));}inline uint32_t GetLE32(const void* memory) { return (static_cast<uint32_t>(Get8(memory, 0)) << 0) | (static_cast<uint32_t>(Get8(memory, 1)) << 8) | (static_cast<uint32_t>(Get8(memory, 2)) << 16) | (static_cast<uint32_t>(Get8(memory, 3)) << 24);}inline uint64_t GetLE64(const void* memory) { return (static_cast<uint64_t>(Get8(memory, 0)) << 0) | (static_cast<uint64_t>(Get8(memory, 1)) << 8) | (static_cast<uint64_t>(Get8(memory, 2)) << 16) | (static_cast<uint64_t>(Get8(memory, 3)) << 24) | (static_cast<uint64_t>(Get8(memory, 4)) << 32) | (static_cast<uint64_t>(Get8(memory, 5)) << 40) | (static_cast<uint64_t>(Get8(memory, 6)) << 48) | (static_cast<uint64_t>(Get8(memory, 7)) << 56);}// Check if the current host is big endian.inline bool IsHostBigEndian() { static const int number = 1; return 0 == *reinterpret_cast<const char*>(&number);}inline uint16_t HostToNetwork16(uint16_t n) { uint16_t result; SetBE16(&result, n); return result;}inline uint32_t HostToNetwork32(uint32_t n) { uint32_t result; SetBE32(&result, n); return result;}inline uint64_t HostToNetwork64(uint64_t n) { uint64_t result; SetBE64(&result, n); return result;}inline uint16_t NetworkToHost16(uint16_t n) { return GetBE16(&n);}inline uint32_t NetworkToHost32(uint32_t n) { return GetBE32(&n);}inline uint64_t NetworkToHost64(uint64_t n) { return GetBE64(&n);}
0 0
- byte order form webrtc soure file
- CCS Cannot open soure file "***"
- Byte order
- Byte order
- Byte Order
- Byte Order
- Byte Order
- byte order
- axis2 form upload file 异常 Invalid UTF-8 middle byte
- Host Byte Order & Network Byte Order
- 字节序 byte order
- Byte Order Mark - BOM
- 字节顺序(byte order)
- BOM(Byte Order Mark)
- Bit and Byte Order
- 字节顺序(byte order)
- Byte order mark (BOM)
- byte[] to file or file to byte[]
- ubuntu卡在登陆界面,无法登入桌面。
- JDBC笔记-Meta类
- jsp内置对象——request
- 呼叫流程
- 【数论】bzoj3601一个人的数论
- byte order form webrtc soure file
- POJ 1061 一次同余方程
- AFNetworking 3.0 使用详解和源码剖析
- docker ubuntu apt-get update 出错Hash Sum mismatch
- ubuntu16.04硬盘重装
- Mysql使用(1)
- java带界面数据库连接简易Atm项目
- 一个80后程序员的转行创业日记14--两个月一塌糊涂
- 1012 Problem L