r*8
2 楼
C 语言,2进制转16进制,输入问题。
我有数据是2进制的像这样“100110010101”现在是字符串形式,很长有100位数左右。
我所知道的2进制输入串行口要这样:
Send_string[0] = 0x65;
Send_string[1] = 0x68;
write(port_A, Send_string, strlen(Send_string));
我的问题:怎么把“100110010101”字符串变为 0x65,0x68、、、放入 Send_string?
哪位大侠指个方向,我去细看。
谢谢!
我有数据是2进制的像这样“100110010101”现在是字符串形式,很长有100位数左右。
我所知道的2进制输入串行口要这样:
Send_string[0] = 0x65;
Send_string[1] = 0x68;
write(port_A, Send_string, strlen(Send_string));
我的问题:怎么把“100110010101”字符串变为 0x65,0x68、、、放入 Send_string?
哪位大侠指个方向,我去细看。
谢谢!
S*A
3 楼
不就是直接input string 用测试 01 然后shift 进register吗。
类似这样, 我没有编译过,不知道能运行不:
void str2bin(const char *input, int size, unsigned char *output)
{
const char *end = input + size;
unsigned char value, i;
while (input < end) {
for (i = 0, value = 0; i < 8 && input < end; i++) {
value <<= 1
value |= (*input++ - '0') & 1;
}
*output++ = value;
}
}
类似这样, 我没有编译过,不知道能运行不:
void str2bin(const char *input, int size, unsigned char *output)
{
const char *end = input + size;
unsigned char value, i;
while (input < end) {
for (i = 0, value = 0; i < 8 && input < end; i++) {
value <<= 1
value |= (*input++ - '0') & 1;
}
*output++ = value;
}
}
r*8
4 楼
很有启发,我去试试。
谢谢!
【在 S*A 的大作中提到】
: 不就是直接input string 用测试 01 然后shift 进register吗。
: 类似这样, 我没有编译过,不知道能运行不:
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;
: while (input < end) {
: for (i = 0, value = 0; i < 8 && input < end; i++) {
: value <<= 1
: value |= (*input++ - '0') & 1;
谢谢!
【在 S*A 的大作中提到】
: 不就是直接input string 用测试 01 然后shift 进register吗。
: 类似这样, 我没有编译过,不知道能运行不:
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;
: while (input < end) {
: for (i = 0, value = 0; i < 8 && input < end; i++) {
: value <<= 1
: value |= (*input++ - '0') & 1;
r*8
5 楼
SSA (草虫) 太牛了,程序运行完全正确。
我没看懂,能不能大致解释一下?
我另有2个具体问题:
1. value <<= 1;
开始的时候,value = 0,在内存的某个位置,移一位怎么理解?
2. value |= (*input++ - '0') & 1; 这句什么意思?
Input向前移一位。-‘0’,还有这个&1是什么意思?
谢谢!
【在 S*A 的大作中提到】
: 不就是直接input string 用测试 01 然后shift 进register吗。
: 类似这样, 我没有编译过,不知道能运行不:
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;
: while (input < end) {
: for (i = 0, value = 0; i < 8 && input < end; i++) {
: value <<= 1
: value |= (*input++ - '0') & 1;
我没看懂,能不能大致解释一下?
我另有2个具体问题:
1. value <<= 1;
开始的时候,value = 0,在内存的某个位置,移一位怎么理解?
2. value |= (*input++ - '0') & 1; 这句什么意思?
Input向前移一位。-‘0’,还有这个&1是什么意思?
谢谢!
【在 S*A 的大作中提到】
: 不就是直接input string 用测试 01 然后shift 进register吗。
: 类似这样, 我没有编译过,不知道能运行不:
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;
: while (input < end) {
: for (i = 0, value = 0; i < 8 && input < end; i++) {
: value <<= 1
: value |= (*input++ - '0') & 1;
S*A
8 楼
因为你要做两件事情,要把 ASCII 的 “0”,“1” 变成 binary 的 0,1
bit. 得到 bit 以后,以后要合并到 byte 里面。
这个移位就是把 byte 里面低的位移上去,给后面的 |= 腾位置。
-‘0’ 是 ASCII 变道 bit。 &1 是确保 input里面如果有垃圾
不是 ‘0’ 或者 ‘1’ 的不会 OR 超过一个 bit。
【在 r*****8 的大作中提到】
: SSA (草虫) 太牛了,程序运行完全正确。
: 我没看懂,能不能大致解释一下?
: 我另有2个具体问题:
: 1. value <<= 1;
: 开始的时候,value = 0,在内存的某个位置,移一位怎么理解?
: 2. value |= (*input++ - '0') & 1; 这句什么意思?
: Input向前移一位。-‘0’,还有这个&1是什么意思?
:
: 谢谢!
r*8
9 楼
@ SSA (草虫)
谢谢您!
您的程序我只做了很小的改动就能运行了。
我要把这个程序放长期运行,例如几个月,运行几千遍以上。
劳驾您再看看,有没有可能出现 Memory leak?
我对那几个*有点担心。
void str2bin(const char *input, int size, unsigned char *output)
{
const char *end = input + size;
unsigned char value, i;
while (input < end) {
for (i = 0, value = 0; i < 8 && input < end; i++) {
value <<= 1
value |= (*input++ - '0') & 1;
}
*output++ = value;
}
}
【在 S*A 的大作中提到】
:
: 因为你要做两件事情,要把 ASCII 的 “0”,“1” 变成 binary 的 0,1
: bit. 得到 bit 以后,以后要合并到 byte 里面。
: 这个移位就是把 byte 里面低的位移上去,给后面的 |= 腾位置。
: -‘0’ 是 ASCII 变道 bit。 &1 是确保 input里面如果有垃圾
: 不是 ‘0’ 或者 ‘1’ 的不会 OR 超过一个 bit。
谢谢您!
您的程序我只做了很小的改动就能运行了。
我要把这个程序放长期运行,例如几个月,运行几千遍以上。
劳驾您再看看,有没有可能出现 Memory leak?
我对那几个*有点担心。
void str2bin(const char *input, int size, unsigned char *output)
{
const char *end = input + size;
unsigned char value, i;
while (input < end) {
for (i = 0, value = 0; i < 8 && input < end; i++) {
value <<= 1
value |= (*input++ - '0') & 1;
}
*output++ = value;
}
}
【在 S*A 的大作中提到】
:
: 因为你要做两件事情,要把 ASCII 的 “0”,“1” 变成 binary 的 0,1
: bit. 得到 bit 以后,以后要合并到 byte 里面。
: 这个移位就是把 byte 里面低的位移上去,给后面的 |= 腾位置。
: -‘0’ 是 ASCII 变道 bit。 &1 是确保 input里面如果有垃圾
: 不是 ‘0’ 或者 ‘1’ 的不会 OR 超过一个 bit。
r*8
11 楼
找到了,C 语言如何给Bit 位赋值。
http://zhidao.baidu.com/question/557196586.html
void main(){ //比特位[6 5 4 3 2 1 0]
int i = 100; //i = 1 1 0 0 1 0 0
i |= (1<<3); //i = 1 1 0 1 1 0 0
// ^__将第3比特置为1,i=108
}
http://zhidao.baidu.com/question/557196586.html
void main(){ //比特位[6 5 4 3 2 1 0]
int i = 100; //i = 1 1 0 0 1 0 0
i |= (1<<3); //i = 1 1 0 1 1 0 0
// ^__将第3比特置为1,i=108
}
S*A
12 楼
r*8
13 楼
你这个*output 怎么实现的?能解释一下吗?
对不起我没看懂:
unsigned char * output
是怎么实现的,能够返回字符串?
怎么我的类似程序里都不好用啊?
【在 S*A 的大作中提到】
: 不就是直接input string 用测试 01 然后shift 进register吗。
: 类似这样, 我没有编译过,不知道能运行不:
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;
: while (input < end) {
: for (i = 0, value = 0; i < 8 && input < end; i++) {
: value <<= 1
: value |= (*input++ - '0') & 1;
对不起我没看懂:
unsigned char * output
是怎么实现的,能够返回字符串?
怎么我的类似程序里都不好用啊?
【在 S*A 的大作中提到】
: 不就是直接input string 用测试 01 然后shift 进register吗。
: 类似这样, 我没有编译过,不知道能运行不:
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;
: while (input < end) {
: for (i = 0, value = 0; i < 8 && input < end; i++) {
: value <<= 1
: value |= (*input++ - '0') & 1;
相关阅读
推荐一个好的PHP (IDE)软件C memory leak problem help再问两个C++问题ask a simple question about int pointer.内存泄露了吗?来,出个题c#:how to disable control update itself in windows form?这Shell脚本哪里有问题一道C++ STL面试题 (转载)gmail 的怪事儿 (转载)Do you like perl style?哪里有Introduction to Algorithms的problem的答案?C++.net 和C++ 有什么不同? 问个fortran的问题有没有能在单台机子上调试mpi程序的simulator? (转载)问问关于 OO Design, Design Pattern 方面的书问个C的问题请推荐一个画图工具C里面有没有default argument这么一说,是不是只有在C++里有这个feature?请问vc中F5和ctrl F5运行程序有什么区别?