C++ 的二进制语法与语义
/* 转载请注明出处:http://www.cnblogs.com/Martinium/p/binary_literal.html */
二进制的语法
int i = 0b101010; // binary
int i = ; // octal
int i = ; // decimal
int i = 0x2a; // hexadecimal
我在解密一些二进制数据的时候,用到过这个函数。先用正则表达式每八个数字一拆分 echo A_LONG_BINARY_STRING | sed -r 's/([01]{8})/\1 /g',然后利用空格作间隔符提取数字所代表的 ASCII 码,当然,你也可以用移位运算自己实现每八个数字一读的功能。
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h> int main()
{
const char* raw = "01110101 01110011 01100101 00100000 01110111 01100101 01100100 01101110 01100101 01110011 01100100 01100001 01111001 00100000 01100110 01101111 01110010 00100000 01110100 01101000 01100101 00100000 01100001 01101110 01110011 01110111 01100101 01110010";
const char* begin;
char* end = const_cast<char*>(raw);
do
{
begin = end;
long int byte = strtol(begin, &end, /*base*/);
putchar(static_cast<int>(byte));
}while(begin != end); return ;
}
// unsigned long long constructor
std::bitset<> ();
// string constructor
std::string bits = "";
std::bitset<> binary(bits); // [0,0,1,1,0,0,1,0]
// string constructor using custom zero/one digits
std::string bacon = "ABABB";
std::bitset<> m(bacon, , std::string::npos, 'A', 'B'); // [0,1,0,1,1]
int value1 = BOOST_BINARY( );
unsigned long value2 = BOOST_BINARY_UL( ); // unsigned long
long long value3 = BOOST_BINARY_LL( ); // long long if supported
提到方便阅读,C++14 加入了数字分隔符这个想法, 于是可以写成 double e = 2.718'281'828'459'045'; 方便阅读。
template<unsigned long long N>
struct binary
{
enum { value = (N%) + binary<N/>::value* };
}; template<>
struct binary
{
enum { value = };
}
// need to enable C++11 flag
template<unsigned long long>
struct binary
{
constexpr static int value = binary<N/>::value + N%;
}; template<>
struct binary<>
{
constexpr static int value = ;
}
int operator "" _B(int i);
static_assert( 101010_B == 42);
C++ 的二进制语法与语义的更多相关文章
- assertion的语法和语义
.1) 语法表示 在语法上,为了支持assertion,Java增加了一个关键字assert.它包括两种表达式,分别如下: assert expression1; assert expression1 ...
- 解读HTML 5新语法 提高语义价值
HTML 5的新标记 设计者们需要完成的任务是要给HTML 5开发一个更丰富的和更有含义的语义,当然可以想象这种新方案将会是很灵活和很高效的,同时与所有的现代互联网标准相适应.下面就是一些将要在HTM ...
- Eigen与Matlab语法及语义辞典
Eigen为Matlab转换为C++提供了一个简单的语法级别的代码迁移工具. 对一些代码进行了扩充,以便程序由Matlab到Eigen的移植................... 参考链接:http: ...
- HTML5经典实例——1基础语法和语义
1指定DOCTYPE 在页面的最开始处指定HTML5 DOCTYPE DOCTYPE是不区分大小写的.可以任意的使用大小写. <!DOCTYPE html> <html lang=& ...
- 15.3 Task 语法和语义
15.3.1 声明异步方法和返回类型 async static void GetStringAsync() { using (var client = new HttpClient()) { Task ...
- net-force.nl/steganography writeup
做CTF题好长一段时间了,真的可以学到很多东西.这次,我们开启 net-force.nl 的 Steganography之旅,所谓的隐写术. level 801: Training - Can you ...
- Compiler Theory(编译原理)、词法/语法/AST/中间代码优化在Webshell检测上的应用
catalog . 引论 . 构建一个编译器的相关科学 . 程序设计语言基础 . 一个简单的语法制导翻译器 . 简单表达式的翻译器(源代码示例) . 词法分析 . 生成中间代码 . 词法分析器的实现 ...
- Python3语法详解
一.下载安装 1.1Python下载 Python官网:https://www.python.org/ 1.2Python安装 1.2.1 Linux 平台安装 以下为在Unix & Linu ...
- HTML标记语法之表格元素
语法与语义: <table>和</table>定义表格的开始和结束 <thead>和</thead>定义表格头部的开始和结束 <tbody> ...
随机推荐
- 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似.你 ...
- iOS10遇到有推送的Demo真机报错的解决
1.打开project.pbxproj,搜com.apple.Push 改成enabled = 0(在projectName.xcodeproj文件上右键"显示包内容",用文本编辑 ...
- Css 知识点(不要删)
测试:火狐浏览器,谷歌浏览器,ie 6~9就足够了,现代浏览器从ie10及 以后兼容性好(适合html5) 1.结构用id,内容用class:fr\fl 用于结构上:能用margin-right就不要 ...
- margin双边距的问题
margin:20px;height:20px;float:left margin:20px;height:20px;float:left
- C#学习笔记
1.C#中[],List,Array,ArrayList的区别 [] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList ...
- CSS3 时钟
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [Scala] 快学Scala A1L1
基础 1.1 声明值和变量 在Scala中,鼓励使用val; 不需要给出值或变量的类型,这个信息可以从初始化表达式推断出来.在必要的时候,可以指定类型. 在Scala中,仅当同一行代码中存在多条语句时 ...
- html页面的CSS、DIV命名规则
CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:l ...
- css3过渡效果
- 最短JavaScript判断是否为IE6、IE的方法
常用的 JavaScript 检测浏览器为 IE 是哪个版本的代码,包括是否是最人极端厌恶的 ie6 识别与检测. var isIE=!!window.ActiveXObject; var isIE6 ...