假设我有一个字符串" AB",我想转换为char []数组并且 将HEX中的两个char数组元素打印到串行监视器。应该很简单。但是,第二个元素始终打印为0。
AB
41 0
我得到的输出是
$query = array();
$query['cmd'] = '_xclick-subscriptions';
$query['upload'] = '1';
$query['business'] = $select_paypal_detail[0]->business_mail;
$product = $_POST['package'];
//$product_price = $_POST['price'];
$product_quantity = $_POST['quantity'];
$query['a3'] = $_POST['price'];
$query['p3'] = 1;
$query['t3'] = 'D';
$query['no_note'] = 1;
//$query['amount'] = $_POST['price'];
$query['discount_rate'] = $_POST['discount'];
$query['item_name'] = $_POST['package'];
$query['quantity'] = $_POST['quantity'];
$query['currency'] = 'CAD';
$query['instId'] = '211616';
$query['testMode'] = 100;
$_SESSION['order_number'] = $order_number;
$query['cartId'] = 'Order Number '.$_POST['order_number'];
$query['return'] = $select_paypal_detail[0]->return_url;
$query['notify_url'] = "http://theelitecoachingacademy.com/?AngellEYE_Paypal_Ipn_For_Wordpress&action=ipn_handler";
// Prepare query string
$query_string = http_build_query($query);
if( $select_paypal_detail[0]->payment_type == 'live' ){
?>
<!--/header('Location: https://www.paypal.com/cgi-bin/webscr?' . $query_string);
header('Location: https://www.sandbox.paypal.com/cgi-bin/webscr?' . $query_string);-->
<script type="text/javascript">
window.location="https://www.paypal.com/cgi-bin/webscr?<? echo $query_string ?>";
</script>
<?php } else { ?>
<script type="text/javascript">
window.location="https://www.sandbox.paypal.com/cgi-bin/webscr?<? echo $query_string ?>";
</script>
<?php
}?>
答案 0 :(得分:1)
toCharArray
会将尽可能多的字符复制到缓冲区中,因为它仍然可以 返回有效的C字符串 。有效的C字符串具有nul(00)终止字节。如果你给它一个2字节的缓冲区,它只能在nul终结符之前适合一个字符。
(查看Arduino源,它会计算要复制的字符数。https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/WString.cpp#L544 bufsize - 1
是为空终止符留出空间的地方。)
你的代码应该是
char myarray[3]; // Make room for 2 chars + nul terminator
line.toCharArray(myarray, sizeof(myarray)); // Use sizeof to avoid repeating '2'
但实际上,根本不需要缓冲区来复制。 String已经有一个字符访问器charAt()
Serial.print(line.charAt(0), HEX);
Serial.print(line.charAt(1), HEX);