首先说下差异,java中byte是短整形,是有符号的,而golang中的byte其实是uint8,是无符号的int8
再说说怎么遇到这个坑的。
因为工作的问题需要把一段java加密程序用golang实现,其中一个方法是将java的long类型值进行“&”运算和“>>”偏移。
以下是java方法的截图。
很简单吧,我依样画葫芦写了一个golang的方法
这是我的golang方法
原以为大功告成,谁知道运算出的结果不一样,这是运算对比的截图(左边java,右边golang)
一开始我以为是“&”运算的问题,疯狂查资料(查了大概2小时),然而java和golang的官法资料都显示关于“&”运算它们的运算逻辑都是一样的。
我留意到计算中的正负值的问题。心想,同样的int值怎么会计算出的值有正有负呢,问题应该不是出在int上。那么,很可能出在byte上。
官方资料显示,java中byte是短整形,是有符号的,而golang中的byte其实是uint8,是无符号的int8.问题应该出在这里。于是我修改了方法,再次尝试。
一次成功。这是最后的打印结果对比。
打印结果显示本次计算结果一样的。
最后吐槽下,真是坑啊,明明都是byte类型,不同语言中的值竟然不一样。
代码如下:
类型
长度 说明
bool 1 true/false,默认false, 不能把非0值当做true(不用数字代表true/false)
byte
1 uint8 别名
rune 4 int32别名。 代表一个unicode code point
int/unit 一来所运行的平台,32bit/64bit
int8/uint8 1 -128 ~ 127; 0 ~ 255
int16/uint16 2 -32768 ~
本文实例讲述了
golang
语言中for循环语句用法。分享给大家供大家参考。具体分析如下:
for循环是用来遍历数组或数字的。用for循环遍历字符串时,也有
byte
和 rune 两种方式.第一种为
byte
,第二种rune.
代码如下:package main
import (
“fmt”
func main() {
s := “abc汉字”
for i := 0; i < len(s); i++ {
fmt.Printf(“%c,”, s[i])
fmt.println()
for _, r := range s {
fmt.Printf(“%c,”, r)
输出结果:
func canConstruct(ransomNote string, magazine string) bool {
if len(ransomNote) == 0 && len(magazine) == 0 || len(ransomNote) == 0 {
return true
if len(magazine) == 0 {
return false
dict1 := make(map[rune]int, 0)
dict2 := make(map[rune]int, 0)
for _, v := range ransomNote {
我先说下场景,数据库定义的长度是VARCHAR2(100),文件数据有一个字段有40个字符,UTF-8编码的非英文字符,如果在插入数据库的时候如果使用String的length()方法去获取长度大小肯定是40.这里40长度肯定是小于数据库大小100,通过了验证,但是插入数据库会出现,值过大。
这里是我说下俩个解决办法:
1.将VARCHAR2(100),字节100,改VARCHAR(C
在C#中
byte
的范围在 [0,255]
所以
java
程序与C#程序 进行数据传输的时候 要先把
java
的
byte
数组转换成在[0,255]范围内的int型数组a[];再把a[]进行加密得到字符串str, 把字符串传到web服务上。
如果已经用C#写好了,关于
byte
数组的逻辑处理,要转成
java
处理的话,需要先对
byte
数组做如下处理:
int data[] = new int[
byte
s.length];
for(int i...
golang
和
java
中
byte
取值范围不一样 o(╯□╰)o,这里是个
坑
golang
定义如下
//
byte
is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish
byte
values from 8-bit unsig
// NetWorkLogger sample network logger
type NetWorkLogger struct {}
func ( n NetWorkLogger ) Write ( b []
byte
) ( int , error ) {
// http.Post("localhost:8080/log", "",
byte
s.NewReader(b))
http . Get ( "http://127.0.0.1:8080/log" )
glg . Success ( "Requested" )
效果把某个字节或字节数组转换成字符串01的形式,一个字节用8个”0”或”1”字符表示。比如:
byte
(3) –> “00000011”
[]
byte
{1,2,3} –> “[00000001 00000010 00000011]”
“[00000011 10000000]” –> []
byte
{0x3, 0x80}开源库 biu实际上我已经将其封装到一个开源库了(biu),其中的一个功能就能
public final String toString() {
byte
[] row = new
byte
[width];
StringBuilder result = new StringBuilder(height * (width + 1));
for (int y = 0; y < heigh