c++中定义一个buff为unsigned char 型,如何初始化全为0
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中定义一个buff为unsigned char 型,如何初始化全为0相关的知识,希望对你有一定的参考价值。
unsigned char buff2;
for (int i=0;i<8;i++)
buff2[i]='0';
网上面这样初始化会出错,该如何改,望高手帮忙看一下~
直接这样定义 unsigned char buff[100] = 0; 就行了。buff[0] 赋值为0,其他没赋值的则自动赋值为0.
如果是char数组,可以直接这样: char buff[100] = "";
0既是二进制的00000000本回答被提问者采纳 参考技术B 上面Jenghau的回答很清楚,你有两个问题:
1、首先你定义的不是字符数组而是单个字符,所以出错。
2、你初始化成'0'是字符0,ASCII是'0x30'不是真正的0,真正的0是'\0'
另外,我们一般用以下方法初始化数据到0,不用循环,循环比较慢。我们一般用:
memset((void*) buf, 0, sizeof(buf)); 参考技术C buff2声明为数组就ok 参考技术D unsigned char buff2[8]; //定义的问题
for (int i=0;i<8;i++)
buff2[i]='0';//注意 这里是 字符'' 0 '' 。
将 c++ DTW 代码转换为 java
【中文标题】将 c++ DTW 代码转换为 java【英文标题】:converting c++ DTW code to java 【发布时间】:2014-03-23 10:30:37 【问题描述】:我想将代码从 C++ 翻译成 Java。原始代码实现了快速 DTW 算法。我无法弄清楚的代码是I
属性我不确定它的作用,因此我无法转换它。
Java 中的错误出现在语句 l_buff+I
和 u_buff+I
中,因为在 int I
和 double[] l_buff,u_buff
之间不支持加号运算符。
我已经收录了所有涉及I
的陈述
int I;
for(i=0; i<ep; i++)
/// A bunch of data has been read and pick one of them at a time to use
d = buffer[i];
/// Calculate sum and sum square
ex += d;
ex2 += d*d;
/// t is a circular array for keeping current data
t[i%m] = d;
/// Double the size for avoiding using modulo "%" operator
t[(i%m)+m] = d;
/// Start the task when there are more than m-1 points in the current chunk
if( i >= m-1 )
mean = ex/m;
std = ex2/m;
std = Math.sqrt(std-mean*mean);
/// compute the start location of the data in the current circular array, t
j = (i+1)%m;
/// the start location of the data in the current chunk
I = i-(m-1);
lb_k2 = lb_keogh_data_cumulative(order, tz, qo, cb2, l_buff+I, u_buff+I, m, mean, std, bsf);
而lb_data_cumlative
方法的实现是
public static double lb_keogh_data_cumulative(int[] order, double []tz, double []qo, double []cb, double []l, double []u, int len, double mean, double std, double best_so_far )
double lb = 0;
double uu,ll,d;
for (int i = 0; i < len && lb < best_so_far; i++)
uu = (u[order[i]]-mean)/std;
ll = (l[order[i]]-mean)/std;
d = 0;
if (qo[i] > uu)
d = dist(qo[i], uu);
else
if(qo[i] < ll)
d = dist(qo[i], ll);
lb += d;
cb[order[i]] = d;
return lb;
这里是代码所依赖的论文SIGKDD TRILLION
【问题讨论】:
【参考方案1】:l_buff+I
和 u_buff+I
表示将数组的开头移到 I
元素。 lb_keogh_data_cumulative
参数 l
和 u
不会看到给定数组的第一个 I
元素。
所以你可以写类似的东西
lb_k2 = lb_keogh_data_cumulative(order, tz, qo, cb2, Arrays.copyOfRange(l_buff, I, l_buff.length), Arrays.copyOfRange(u_buff, I, u_buff.length), m, mean, std, bsf);
调用的方法不会修改数组,因此您可以传递一个副本。
【讨论】:
以上是关于c++中定义一个buff为unsigned char 型,如何初始化全为0的主要内容,如果未能解决你的问题,请参考以下文章
C++怎么将 CString 转换成 unsigned char 的数组
c++中定义一个无符号的整形不赋值默认值是多少 unsigned int point;
在 C++ 中将 unsigned char (byte) 数组转换为 unsigned short