10_在c代码中使用logcat-9
1.Android.mk文件增加以下内容
LOCAL_LDLIBS += -llog
2.C代码中增加以下内容
#include <android/log.h>
#define LOG_TAG "System.out"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
3.C代码中使用logcat, 例:
LOGI("info\n");
LOGD("debug\n");
11_使用C语言校验密码综合案例-strcmp-22
- C端验证密码代码如下:
创建文件“登录校验.c”
#include<stdio.h>
#include<stdlib.h>
//校验密码是否正确,正确返回200,错误返回400
int login(char* password){
//校验密码
//原始密码,服务器的密码
char* originPassword = "123";
//比较密码,密码相同返回0
int isSame = strcmp(password,originPassword);
if(isSame ==0)
{
return 200;
}
return 400;
}
main(){
char* password = "123";
int result = login(password);
if(result==200)
{
printf("登录成功!\n");
}else{
printf("登录失败!\n");
}
system("pause");
}
运行结果:
- Android工程创建并移植
1、创建Android工程名:C端验证密码;包名:com.atguigu.checkpassword
2、布局文件效果如下:
3、Java代码
package com.atguigu.checkpassword;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText ed_password;
{
System.loadLibrary("atguigu");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed_password = (EditText) findViewById(R.id.ed_password);
}
public void login(View view){
String password = ed_password.getText().toString().trim();
int result = login(password);
if(result==200){
Toast.makeText(this, "登录成功", 1).show();
}else{
Toast.makeText(this, "登录失败", 1).show();
}
}
public native int login(String password);
}
3.C语言完整代码
#include "com_atguigu_checkpassword_MainActivity.h"
#include <stdio.h>
#include <stdlib.h>
/**
* 把一个jstring转换成一个c语言的char* 类型.
*/
char* _JString2CStr(JNIEnv* env, jstring jstr) {
char* rtn = NULL;
jclass clsstring = (*env)->FindClass(env, "java/lang/String");
jstring strencode = (*env)->NewStringUTF(env,"GB2312");
jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid, strencode); // String .getByte("GB2312");
jsize alen = (*env)->GetArrayLength(env, barr);
jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);
if(alen > 0) {
rtn = (char*)malloc(alen+1); //"\0"
memcpy(rtn, ba, alen);
rtn[alen]=0;
}
(*env)->ReleaseByteArrayElements(env, barr, ba,0);
return rtn;
}
/**
* 校验密码是否正确,正确返回200,错误返回400
*/
int login(char* password){
//校验密码
//原始密码,服务器的密码
char* originPassword = "123";
//比较密码
int isSame = strcmp(password,originPassword);
if(isSame ==0)
{
return 200;
}
return 400;
}
JNIEXPORT jint JNICALL Java_com_atguigu_checkpassword_MainActivity_login
(JNIEnv *env, jobject obj, jstring jPassword){
//jstring转换成char*
char* cStr = _JString2CStr(env,jPassword);
//登录
return login(cStr);
}
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。